2011-04-19 56 views
2

我的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标签 文本(在这种情况下 - “主机经理/ HTML HTTP”),我与这个试图

XPathExpression expr = xpath.compile("/xml 
             /group 
              /packet 
               /comp 
                /actual-data 
                /text()"); 

但它给出空字符串。 是因为那个[CDATA]的东西。我还没有想到那是什么。它是标签还是属性?

任何人都可以给查询得到应得的数据。 (在这种情况下 - “主机经理/ HTML HTTP”)

+0

也注意到,有这DOC 2场比赛(“GET /”是第一场比赛) – laher 2011-04-19 09:08:42

+0

这不是有关XPath的,但使用XPath结果数据类型。重新标记。 – 2011-04-19 15:00:14

回答

1

将您的XPath替换为/xml/group/packet/comp/actual-data。如果您将XPathExpression评估为字符串,则应该获取< actual-data>的内容。

看到这个similar question

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()"); 
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()); 
}