Функция 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)