Xpath, чтобы получить все атрибуты поддерева DOM? - PullRequest
0 голосов
/ 27 августа 2011

Может кто-нибудь объяснить, почему это происходит; вот следующий код, который я получил:

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<title text=\"title1\">\n" +
"    <comment id=\"comment1\">\n" +
"        <data> abcd </data>\n" +
"        <data> efgh </data>\n" +
"    </comment>\n" +
"    <comment id=\"comment2\">\n" +
"        <data> ijkl </data>\n" +
"        <data> mnop </data>\n" +
"        <data> qrst </data>\n" +
"    </comment>\n" +
"</title>\n";

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xml)));
NodeList nlist = doc.getElementsByTagName("comment");

XPathFactory xpf = XPathFactory.newInstance();
XPath xp = xpf.newXPath();
NodeList nodes = (NodeList)xp.evaluate("//@*", nlist.item(0), XPathConstants.NODESET);
for(int i = 0; i < nodes.getLength(); i++)
    System.out.println(nodes.item(i));

Полученная продукция:

text="title1"
id="comment1"
id="comment2"

Проблема в том, что я пытаюсь выполнить запрос XPath к поддереву (то есть к первому comment блоку), поэтому я просто хочу получить все атрибуты для этого поддерева , но по какой-то причине, независимо от того, какое поддерево я передаю, оно всегда возвращает все атрибутные узлы, как если бы объект, передаваемый в оценщик xpath, был корневым узлом.

Как я могу просто передать и оценить все атрибуты для поддерева?

1 Ответ

2 голосов
/ 27 августа 2011

Вы должны опустить // в выражении XPath.

NodeList nodes = (NodeList)xp.evaluate("@*", nlist.item(0), XPathConstants.NODESET);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...