2016-08-30 53 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