Когда вы выбираете /config/a/b/
, вы выбираете все дочерние элементы b
, что включает три текстовых узла и два элемента. То есть, учитывая ваш XML выше и показывая только рассматриваемый фрагмент:
<b>
<param>p1</param>
<param>p2</param>
</b>
первым дочерним элементом является текст (пробел), следующий за <b>
и предшествующий <param>p1 ...
. Второй дочерний элемент - это первый элемент param
. Третий дочерний элемент - это текст (пробел) между двумя элементами param
. И так далее. Пробелы не игнорируются в XML, хотя многие формы обработки XML игнорируют его.
У вас есть пара вариантов:
- Измените ваше выражение xpath, чтобы оно выбирало только узлы элементов, как предложено Тедом Дзюбой, или
- Зацикливание на пяти возвращенных узлах и выбор только нетекстовых узлов.
Вы могли бы сделать что-то вроде этого:
for (int i = 0; i < nodes.getLength(); i++) {
if (nodes.item(i).getNodeType() != Node.TEXT_NODE) {
System.out.println(nodes.item(i).getNodeValue());
}
}
Вы можете использовать тип узла, чтобы выбрать только узлы элемента или удалить текстовые узлы.