Функция XPath Count всегда возвращает 0.0

Я использую ниже XML, чтобы получить количество тегов "с".

<?xml version='1.0' encoding='UTF-8'?>
<xyz xmlns=".....">
<a>
  <b>
    <c>X:1 Y:0</c>
    <c>X:1 Y:0</c>
    <c>X:2 Y:0</c>
  </b>
  <b>
    <c>X:1 Y:0</c>
    <c>X:2 Y:0</c>
  </b>
</a>
</xyz>

Ниже мой код Java:

xpath = factory.newXPath();
xpr = xpath.compile("count(//xyz/a/b/c)");
System.out.println(xpr.evaluate(inputSource, XPathConstants.NUMBER));

Но приведенный выше код всегда возвращает 0.0

Я делаю что-то неправильно?

2 ответа

Решение

Если вы хотите считать элементы с локальным именем xyzВыражение должно быть следующим:

XPathExpression xpr = xpath.compile("count(//*[local-name()='xyz']/*[local-name()='a']/*[local-name()='b']/*[local-name()='c'])");

Demo.

Не удаляйте значение атрибута пространства имен. Это важно, потому что это фактическое пространство имен.

xmlns="urn:somevalue"определяет пространство имен по умолчанию для элементов. <xyz xmlns="urn:somevalue"/> или <ns1:xyz xmlns:ns1="urn:somevalue"/> может быть прочитано как имя узла {urn:somevalue}:xyz,

XPath 1.0 не имеет пространства имен по умолчанию. Вы всегда должны использовать префикс для узлов в пространстве имен.

Так что, если вы определите префикс ns1 в преобразователе пространства имен для вашего XPath выражение будет:

count(//ns1:xyz/ns1:a/ns1:b/ns1:c)
Другие вопросы по тегам