Получить атрибуты из списка узлов, используя xpath в Java - PullRequest
0 голосов
/ 08 января 2020

XML

    <Employees>
<Employee id="1" name="xyz">
<Employee id="2" name="abc">
</Employees>

Я могу получить список узлов Employee с выражением xpath

XPathExpression expr=xpath.compile("/Employees/Employee");
            NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

Как получить идентификатор атрибута, имя каждого узла в списке.

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Нельзя запросить один список, возвращающий 2 кортежа (id, name), но вы можете иметь это в двух отдельных списках узлов:

XPathExpression expr1 = xpath.compile("/Employees/Employee/@id");
NodeList nodes1 = (NodeList) expr1.evaluate(doc, XPathConstants.NODESET);

XPathExpression expr2 = xpath.compile("/Employees/Employee/@name");
NodeList nodes2 = (NodeList) expr2.evaluate(doc, XPathConstants.NODESET);

Однако, если наличие одного списка так важно, возможен некоторый обходной путь, например, путем объединения обоих значений атрибутов в csv-подобную строку:

XPathExpression expr = xpath.compile("concat(/Employees/Employee/@id, ';', /Employees/Employee/@name)");

, которая вернет список из 2 узлов:

"1;xyz"
"2;abc"
0 голосов
/ 08 января 2020

Попробуйте изменить выражение xpath на

/Employees/Employee/@id
...