Выражение xpath из xml с префиксом пространства имен

Я не смог заставить работать следующее выражение 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 ответа

Решение

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

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

Обходные пути:

/*/*[name()='bk:Books']/*[name()='bk:Book' and text()='Time Machine']

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

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

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

Другие вопросы по тегам