Может кто-нибудь объяснить, почему это происходит. Я упростил свою проблему, создав простую программу, но узнаю подробности о проблеме, с которой я сталкиваюсь:
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)));
System.out.println(doc.getFirstChild().getNodeName());
System.out.println(doc.getFirstChild().getFirstChild().getNodeName());
Соответствующий вывод это:
title
#text
Во-первых, почему я не могу получить узел comment
?
Во-вторых, почему узел data
интерпретируется как узел #text
?
Какой был бы правильный и простой способ получить необходимые узлы. Также обратите внимание, что файл XML не является фиксированным; Я хочу произвольное решение. спасибо.
EDIT:
У меня похожая проблема при использовании Xpath, см. Код ниже:
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("/title/comment/data/text()");
NodeList result = (NodeList) expr.evaluate(msg.document(), XPathConstants.NODESET);
for(int i = 0; i < result.getLength(); i++)
System.out.println(result.item(i).getNodeName() + " : " + result.item(i).getNodeValue());
Это дает вывод:
#text : abcd
#text : efgh
#text : ijkl
#text : mnop
#text : qrst