2017-08-17 196 views
0

我想從以下XML源獲取所有活動及其子節點。XPath獲取所有子節點和值

<process> 
    <name>processName</name> 
    <input>JSON</input> 
    <input>productName</input> 
    <output>JSON</output> 
    <activity> 
    <name>createDomain</name> 
    <type>bean</type> 
    <input>domainName</input> 
    <output>JSON</output> 
    </activity> 
    <mapActivity> 
    <map></map> 
    </mapActivity> 
    <activity> 
    <name>preFill</name> 
    <type>REST</type> 
    <input>JSON</input> 
    <output>JSON</output> 
    </activity> 
</process> 

那麼結果將返回createDomain, bean, domainName, JSONpreFill, REST, JSON, JSON。但我不確定如何去做這件事。

我目前有此代碼。

public static void displayActivities(Document myDoc) throws Exception { 
    XPathExpression exp = xp.compile("process/activity/*"); 
    NodeList myList = (NodeList) exp.evaluate(myDoc, XPathConstants.NODESET); 
    for (int i = 0; i < myList.getLength(); i++) { 
     Node tempNode = myList.item(i); 
     System.out.println("Value: " + tempNode.getNodeValue()); 
     if (tempNode.hasChildNodes()) { 
      for (int x = 0; x < tempNode.getChildNodes().getLength(); x++) { 
       System.out.println("Sub-value: " + myDoc.getChildNodes().item(x).getNodeName()); 
      } 
     } 
    } 
    System.out.println("------------------------------"); 
} 

這將返回以下:

Value: null 
Sub-value: process 

回答

0

當使用Java的一切DOM是一個節點。元素是一個節點,文本是一個節點,等等。你的XPath將返回完整的XML元素:

  • <名>則createdomain < /名稱>
  • <型> < /類型>
  • <輸入> JSON < /輸入>
  • <輸出> JSON < /輸出>

含義tempNode實際上是類型元素,而不是文本。您將在子節點中找到文本。根據Node Javadoc當調用getNodeValue()時元素將返回null。