2016-08-30 77 views
2

我想將包含XML的字符串解析爲Java中的文檔對象。下面是該方法的源代碼:如何將字符串解析爲Java中的XML文檔?

private Document getDocument(String xml) { 

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = null; 

    try { 
     builder = factory.newDocumentBuilder(); 
    } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
    } 

    Document doc = null; 
    try { 
     doc = builder.parse(new InputSource(new StringReader(xml))); 
    } catch (SAXException e) { 
     System.out.println(e.toString()); 
    } catch (IOException e) { 
     System.out.println(e.toString()); 
    } 

    return doc; 
} 

我根據調試器總是爲doc變量的值是

[#document:空]

不任何人都有線索有什麼問題?

謝謝你的時間!

+0

的可能的複製[如何解析包含在Java的XML字符串和檢索的價值根節點?](http://stackoverflow.com/questions/8408504/how-to-parse-a-string-containing-xml-in-java-and-retrieve-the-value-of-the-root) – DimaSan

回答

2

這是正常的,因爲調試器正在調用Document#toString(),它打印[node_name: node_value]。根據W3C spec,文檔節點的節點值爲空。如果要打印根元素的名稱,則應評估doc.getDocumentElement().getNodeName()

+0

這真的值得回答嗎?它看起來很好,但真的,答案?! – GhostCat

+0

非常感謝!你是對的。 –

1

如果您發佈XML文檔以查看結構,這將是很好的,但這是我讀取XML所做的。

// Opening and creating file Objects 
    File inputFile = new File(xmlFile); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(inputFile); 
    doc.getDocumentElement().normalize(); 

之後,您可以使用doc.getElementsByTagName("Root Node");讓你的XML的根節點。該對象有很多的屬性,這取決於strucure getFirstChild()getChildNodes()一樣,生病建議閱讀:

http://www.w3schools.com/xml/dom_intro.asp