在Java中,如何将XML解析为String而不是文件?

Dew*_*yne 245 java xml string parsing file

我有以下代码:

DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
Run Code Online (Sandbox Code Playgroud)

我怎样才能解析String中包含的XML而不是文件?

shs*_*mer 471

我在我的代码库中有这个功能,这应该适合你.

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);
}
Run Code Online (Sandbox Code Playgroud)

也看到了这个类似的问题

  • @shsteimer我传入xml字符串,并且返回null。它不会引发任何异常。怎么了 (3认同)
  • 如果我有<?XML>它返回一个空节点我该怎么办? (2认同)
  • 检查您是否使用了正确的导入语句:“import org.xml.sax.InputSource;” (2认同)

Uri*_*Uri 16

一种方法是使用带有InputSource而不是文件的parse版本

可以从Reader对象构造SAX InputSource.一个Reader对象是StringReader

所以像

parse(new InputSource(new StringReader(myString))) may work. 
Run Code Online (Sandbox Code Playgroud)


Akb*_*him 6

将字符串转换为 InputStream 并将其传递给 DocumentBuilder

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

编辑
在回答bendin的有关编码评论,看到shsteimer的回答了这个问题。

  • 当您调用 getBytes() 时,您希望它使用什么编码?你如何告诉 XML 解析器它得到的是哪种编码?你指望它猜吗?当您在默认编码不是 UTF-8 的平台上时会发生什么? (3认同)

Yas*_*ary 6

我正在使用这个方法

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;
}
Run Code Online (Sandbox Code Playgroud)


duf*_*ymo 5

javadocs显示parse方法已重载.

使用字符串XML创建StringStream或InputSource,您应该进行设置.