2011-04-19 67 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()); 
}