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"/>
Другие вопросы по тегам