2012-04-21 149 views
0

所以我設法使用SAX成功地解析了我的XML文檔,現在我正在嘗試使用DOM解析XML文檔(導致與使用SAX實現的輸出相同)。需要一些幫助從SAX移動到DOM。解析XML(java)

我已經設法編輯大部分SAX代碼在DOM中工作。

例如用SAX在開始和結束元素我使用:

if (qName.equals("Name")){...} 

並用DOM萬一Node.ELEMENT_NODE我剛編輯這對:

String name = node.getNodeName(); 
if (name.equals("Name")){...} 

I部分I」 m卡住是如何我可以用類似的方式解析SAX中的所有endElement使用DOM?

我管理的所有文字使用打印:

case Node.TEXT_NODE: 

    System.out.print(node.getNodeValue().trim()); 

,但我怎麼會去一個特定的文本節點後打印的東西嗎?在SAX中,這可以在endElement中輕鬆完成。

我一直在試圖用它來打印名稱元素內的文本,但它不工作。

case Node.TEXT_NODE: 

if (node.getNodeName().equals("name")) { 
     System.out.print(node.getNodeValue().trim()); 
    } 

感謝您的任何幫助。

+0

Chk this out http://www.mkyong.com/java/how-to-read-xml-file-in-java- DOM解析器/ – ant 2012-04-21 16:24:22

回答

0

看一看到Node的javadoc - 它有一個固定的名字"#text";你需要檢查父母的名稱,即標籤:

case Node.TEXT_NODE: 

if (node.getParentNode().getNodeName().equals("Name")) { 
    System.out.print(node.getNodeValue().trim()); 
} 
0

您是否嘗試過遞歸方法?

public void visitNode(Node node) { 
    // Print something emulating a start tag 

    // Visit all child nodes recursively 
    for (int i = 0; i < node.getChildNodes().getLength(); i++) 
    visitNode(node.getChildeNodes().item(i)); 

    // Print something emulating an end tag 
} 
0

如果你知道你想要的節點的另一種方法是使用xpath。該設置可能看起來很壓倒性,但它非常強大。

String xpath="//name"; 
XPath xpath = XPathFactory.newInstance().newXPath(); 
XPathExpression expr = xpath.compile(xpathStatement); 
NodeList nodes = (NodeList) expr.evaluate(source, XPathConstants.NODESET); 
for (int i=0; i<nodes.getLength(); i++) { 
    Node node = nodes.item(i); 
    System.out.println(node.getNodeValue()); 
}