Как получить значение определенного узла в XPath? - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть XML-файл в этом формате:

<object>
<origin>1:1:1</origin>
<normal>2:2:2</normal>
<leafs>
    <object>
        <origin>1:1:1</origin>
        <normal>3:3:3</normal>
        <leafs>none</leafs>
    </object>
</leafs>
</object>

Как я могу получить значение "none" элемента <leafs> на втором уровне дерева?Я использовал это

XPathExpression expLeafs = xpath.compile("*[name()='leafs']");
Object resLeafs = expLeafs.evaluate(node, XPathConstants.NODESET);
NodeList leafsList = (NodeList) resLeafs;
if (!leafsList.item(0).getFirstChild().getNodeValue().equals("none"))
         more code...

, но это не работает, потому что есть несколько пустых текстовых узлов до и после «нет».Есть ли способ справиться с этим, как xpath.compile("*[value()='none']")?

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Я только что запустил простую тестовую программу, используя ваш файл XML и

expr = xpath.compile("/object/leafs/object/leafs/text()");

, и получил желаемый результат "нет".Если у вас есть дополнительные требования, вам придется отредактировать свой вопрос.

1 голос
/ 16 декабря 2011

После проверки строки кода @Lord Torgamus при условии, что мне удалось разобрать документ так, как мне нужно, вот так:

XPathExpression expLeafs = xpath.compile("*[name()='leafs']");
Object resLeafs = expLeafs.evaluate(node, XPathConstants.NODESET);
NodeList leafsList = (NodeList) resLeafs;

Node nd = leafsList.item(0);

XPathExpression expr = xpath.compile("text()");
Object resultObj = expr.evaluate(nd, XPathConstants.NODE);
String str = expr.evaluate(nd).trim();
System.out.println(str);

и вывод "none" без другого пустого текстового узла.

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