如何检索实际数据标签中的文本?

时间:2011-04-19 08:10:03

标签: java xml xpath nodelist

我的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”)

4 个答案:

答案 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 我认为这会有所帮助。