我的xml文件如下:
<xml>
<group id="1">
<dstport>8080</dstport>
<packet id="1">
<comp type="const">
<actual-data><![CDATA[GET /]]></actual-data>
<binary><![CDATA[47 45 54 20 2f ]]></binary>
</comp>
<comp type="var">
<actual-data><![CDATA[host-manager/html HTTP]]></actual-data>
<binary><![CDATA[68 6f 73 74 2d 6d 61 6e 61 67 65 72 2f 68 74 6d 6c 20 48 54 54 50 ]]></binary>
</comp>
</packet>
</group>
</xml>
我想检索actual-data
标记中的文字
(在这种情况下 - “host-manager / html HTTP”)
我正在尝试这个:
XPathExpression expr = xpath.compile("/xml
/group
/packet
/comp
/actual-data
/text()");
但它给出了空字符串。 是因为[CDATA]的事情。我还没想出那是什么。它是标签还是属性?
任何人都可以提供查询以获取应得的数据。 (在这种情况下 - “host-manager / html HTTP”)
答案 0 :(得分:1)
将您的XPath替换为/xml/group/packet/comp/actual-data
。如果您将XPathExpression评估为字符串,那么您应该获得&lt; actual-data&gt;的内容。
请参阅此similar question。
答案 1 :(得分:1)
您的xpath表达式不明确:
此代码:
InputSource inputSource = new InputSource("test.xml");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("
/xml/group/packet/comp/actual-data/text()");
String s = expr.evaluate(inputSource);
System.out.println(s);
将显示:
GET /
这是第一个实际数据标记的内容。如果你想要第二个,你应该更具体:
XPathExpression expr = xpath.compile("
/xml/group/packet/comp[@type='var']/actual-data/text()");
答案 2 :(得分:1)
有2个结果。因此,如果您希望两个项目都返回,请执行以下操作:
XPath xpath = XPathFactory.newInstance().newXPath();
String xpathExpression = "/xml/group/packet/comp/actual-data";
InputSource inputSource = new InputSource("test.xml");
NodeList nodes = (NodeList) xpath
.evaluate(xpathExpression, inputSource, XPathConstants.NODESET);
int j = nodes.getLength();
for (int i = 0; i < j; i++) {
System.out.println("node:" + nodes.item(i).getTextContent());
}
答案 3 :(得分:0)
看到这个 http://www.java-samples.com/showtutorial.php?tutorialid=152 我认为这会有所帮助。