XPath выбирает теги по id, а не потомкам - PullRequest
0 голосов
/ 18 мая 2010

У меня есть следующий код, и я должен выбрать все узлы с id = "text", но не узлы, у которых уже есть родитель с id = "text":

<fo:block id="text">
  test00
  <fo:block id="text">
      test01
  </fo:block>
  <fo:block>
      test02
  </fo:block>
</fo:block>
<fo:block id="text">
    test03
</fo:block>

, поэтому в этом примере запрос должен возвращать только два объекта fo: block с содержимым test00 и test03.

Спасибо.

1 Ответ

2 голосов
/ 18 мая 2010

Я бы пошел с чем-то вроде этого:

//fo:block[@id='text' and not(./*[@id='text'])]

Я собираюсь дать ему тест прямо сейчас, чтобы убедиться, что он нормальный. Да уж. Возвращает text00 и text03, как требуется. Итак, позвольте мне объяснить это выражение.

//fo:block             # Select all fo:block elements in the document
[
  @id='text' and       # Get only those whose id attribute's value is "text"
  not(./*[@id='text']) # and whose children do not have id attributes equal to "text"
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...