XPath: выберите узел на основе значения другого узла
Предположим, у меня есть список предметов, каждый со своим <id>
элемент. Также есть <primaryId>
элемент (за пределами упомянутого списка), указывающий, какой из этих элементов является "основным". Как выбрать "основной" предмет <value>
элемент? Можно ли сделать с помощью XPath в.Net?
Результат в следующем примере должен быть <value>val2</value>
,
<root>
<primaryId>2</primaryId>
<items>
<item>
<id>1</id>
<value>val1</value>
</item>
<item>
<id>2</id>
<value>val2</value>
</item>
</items>
</root>
2 ответа
Решение
Пути расположения в XPath могут включать условия в []
,
Итак, сначала выберите основной идентификатор узла:
/root/primaryId
Сделайте это условием, сравните его с элементом id в контексте условия:
[id=/root/primaryId]
Используйте его для фильтрации узлов элемента:
/root/items/item[id=/root/primaryId]
И полное выражение:
/root/items/item[id=/root/primaryId]/value
<xsl:value-of select="/root/items/item[id=/root/primaryId]/value"/>