Выражение 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
игнорирует любой префикс, который, как правильно указано комментаторами, может меняться.