xpath с пространством имен по умолчанию без префикса - PullRequest
1 голос
/ 30 апреля 2020

Я использую библиотечный метод для оценки xpath (apache commons-text '* XmlStringLookup), который устанавливает осведомленность пространства имен DocumentBuilderFactory в true, и я не могу это изменить. Мне нужно запросить файл pom.xml с этим, который имеет пространство имен по умолчанию без префикса:

   <project xmlns="http://maven.apache.org/POM/4.0.0" ...>
     <modelVersion>4.0.0</modelVersion>
   ...

Я бы хотел иметь возможность запроса так же, как:

 /project/modelVersion   

но из-за осознания пространства имен результаты получаются пустыми. Я знаю, что могу использовать что-то вроде:

//*[local-name()="project"] ...

, но это просто громоздко. Вопрос в следующем: есть ли синтаксис Xpath для запроса пространств имен без префикса? Что-то вроде:

/:project/:modelVersion

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Если вы перейдете на XPath 3.1 (доставленный через Saxon 10.0), то

(a) /*:project будет извлекать элемент с локальным именем проекта в любом пространстве имен (или ни в одном из них)

(b) /Q{http://maven.apache.org/POM/4.0.0}project извлечет элемент с проектом локального имени в указанном пространстве имен без необходимости внешнего объявления префиксов пространства имен

(c) Saxon API позволяет вызывать XPathCompiler.declareNamespace ("", "http://maven.apache.org/POM/4.0.0"), после чего /project выбирает элемент в этом пространстве имен.

1 голос
/ 30 апреля 2020

В XPath нет, нет альтернативного синтаксиса, который игнорирует пространства имен, по умолчанию или иным образом, кроме проверки на local-name() (все версии) или *:NCName ( XPath 2.0 и выше).

В XPath также отсутствует механизм привязки префиксов пространства имен к пространствам имен. Список механизмов привязки префиксов пространства имен, доступных на различных языках и библиотеках хостинга, см. В Как XPath работает с XML пространствами имен?

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