Получить определенные предшествующие атрибуты узлов-братьев - PullRequest
0 голосов
/ 27 мая 2010

Существует ли способ XPath для непосредственного восстановления одного определенного атрибута предыдущих узлов одного и того же узла XML с помощью запроса XPath?

В следующем примере я хотел бы получить значения атрибута alt каждого узла img, который предшествует элементу div, отмеченному id=marker.

<content>
  <img alt="1" src="file.gif" />
  <img alt="2" src="file.gif" />
  <img alt="3" src="file.gif" />
  <img alt="4" src="file.gif" />
  <div id='marker'></div>
</content>

Для этого примера я хочу получить значения 1 2 3 4.
Я использую следующий запрос XPath

//div[@id='marker']/preceding-sibling::img

для получения списка узлов, которые я хочу

<img alt="1" src="file.gif"/>
<img alt="2" src="file.gif"/>
<img alt="3" src="file.gif"/>
<img alt="4" src="file.gif"/>

Поскольку это список узлов, я могу затем выполнить итерации по узлам для получения значения атрибута, которое я ищу, но есть ли способ XPath сделать это? Я ожидал, что смогу написать что-то вроде:

//div[@id='marker']/preceding-sibling::img@alt
or //div[@id='marker']/preceding-sibling@alt::img

но я даже не знаю, возможно ли это после того, как вы использовали XPath Axe как предыдущий брат или сестра.

1 Ответ

5 голосов
/ 27 мая 2010

Используйте

//div[@id='marker']/preceding-sibling::img/@alt

При этом выбираются имена всех атрибутов (узлов атрибутов) alt всех элементов img, которые предшествуют родственным элементам некоторого элемента div (в любом месте документа XML), чей атрибут id имеет значение 'marker'.

В XPath 2.0 вы даже можете получить последовательность строк, которые являются значениями этих alt атрибутов :

//div[@id='marker']/preceding-sibling::img/@alt/string()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...