2014-09-30 46 views
0

我知道我可以使用DocumentBuilder來解析xml文件並遍歷節點,但我一直在研究節點是否有更多子節點。因此,例如,在該XML:如何在不知道模式的情況下遍歷xml節點

<MyDoc> 
<book> 
    <title> ABCD </title> 
</book> 
</MyDoc> 

,如果我做node.hasChildNodes()我得到兩本書,標題如此。但是我想要做的是,如果一個節點有一些文本值(不是屬性),如標題,然後打印它,否則不做任何事情。我知道這是一些簡單的檢查,但我似乎無法在網上找到答案。我可能不會搜索正確的關鍵字。提前致謝。

回答

0

嘗試getChildNodes()。這將返回一個NodeList對象,它允許您遍歷所引用的節點下的所有節點。不管他們可能擁有什麼名字。

0

您必須通過調用getNodeType()來調用getChildNodes()來檢查您獲得的子節點的類型。 <book>有一個ELEMENT_NODE類型的孩子,而<title>有一個TEXT_NODE類型的孩子。

0

我不確定,但我想你想要一種遍歷所有元素的方式,而不管它是如何嵌套的。以下遞歸遍歷所有元素。然後,只要打印的元素值作爲其不只是空白:在元素節點存在於DOM

public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException 
{ 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 

    Document doc = builder.parse("test.xml"); 
    NodeList childNodes = doc.getChildNodes(); 
    iterateNodes(childNodes); 
} 

private static void iterateNodes(NodeList childNodes) 
{ 
    for (int i = 0; i < childNodes.getLength(); ++i) 
    { 
     Node node = childNodes.item(i); 
     String text = node.getNodeValue(); 
     if (text != null && !text.trim().isEmpty()) { 
      System.out.println(text); 
     } 
     if (node.hasChildNodes()) { 
      iterateNodes(node.getChildNodes()); 
     } 
    } 
} 
相關問題