在Java中,如何将XMLparsing为string而不是文件?

我有以下代码:

DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile); 

我怎样才能parsing包含在一个string,而不是一个文件的XML?

我在我的代码库中有这个function,这应该为你工作。

 public static Document loadXMLFromString(String xml) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputSource is = new InputSource(new StringReader(xml)); return builder.parse(is); } 

也看到这个类似的问题

一种方法是使用采用InputSource而不是文件的parsing版本

SAX InputSource可以从Reader对象构造而成。 一个Reader对象是StringReader

所以像

 parse(new InputSource(new StringReader(myString))) may work. 

javadocs显示parsing方法被重载。

使用你的stringXML创build一个StringStream或InputSource,你应该被设置。

将string转换为InputStream并将其传递给DocumentBuilder

 final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8)); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); builder.parse(stream); 

编辑
为了回应bendin关于编码的评论,请参阅shsteimer对这个问题的回答。

我正在使用这种方法

 public Document parseXmlFromString(String xmlString){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputStream inputStream = new ByteArrayInputStream(xmlString.getBytes()); org.w3c.dom.Document document = builder.parse(inputStream); return document; } 

您可以使用GitHub提供的Scilca XML Progession包。

 XMLIterator xi = new VirtualXML.XMLIterator("<xml />"); XMLReader xr = new XMLReader(xi); Document d = xr.parseDocument();