выражение xpath из xml с префиксом пространства имен - PullRequest
13 голосов
/ 14 октября 2010

Мне не удалось заставить работать следующее выражение xpath, если задан префикс пространства имен пути xml.

/bk:BookStore/bk:Books/bk:Book[text()='Time Machine']

XML это:

<BookStore xmlns:bk="http://www.bookstore.com/book#">
  <bk:Books>
    <bk:Book id="1">Time Machine></bk:Book>
  </bk:Books>
</bk:BookStore>

Ответы [ 2 ]

29 голосов
/ 18 ноября 2011

Или даже лучше (и более переносимый), без ненужного префикса:

/*/*[local-name()='Books'] ... and so on

Функция local-name игнорирует любой префикс, который, как правильно указано комментаторами, может варьироваться.

15 голосов
/ 14 октября 2010

Без дополнительной информации о языке хоста (в котором вы пытаетесь оценить выражения XPath) невозможно дать полезную рекомендацию .

Как правило, нужно «зарегистрировать» пространство имен с помощью менеджера пространства имен, и это также связывает префикс с зарегистрированным пространством имен.Затем, используя этот объект NamespaceManager в качестве аргумента метода оценки XPath, можно указать в качестве аргумента этого метода выражение XPath, которое содержит имена с префиксом этого конкретного префикса.

Временные решения :

/*/*[name()='bk:Books']/*[name()='bk:Book' and text()='Time Machine']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...