我有以下代码:
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
我如何才能让它解析包含在字符串而不是文件中的XML ?
我有以下代码:
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
我如何才能让它解析包含在字符串而不是文件中的XML ?
当前回答
一种方法是使用接受InputSource而不是接受文件的parse版本
SAX InputSource可以从Reader对象构造。一个Reader对象是StringReader
就像这样
parse(new InputSource(new StringReader(myString))) may work.
其他回答
Javadocs表明解析方法是重载的。
使用你的字符串XML创建一个StringStream或InputSource,你应该设置好。
一种方法是使用接受InputSource而不是接受文件的parse版本
SAX InputSource可以从Reader对象构造。一个Reader对象是StringReader
就像这样
parse(new InputSource(new StringReader(myString))) may work.
将字符串转换为InputStream并将其传递给DocumentBuilder
final InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.parse(stream);
编辑作为对bendin关于编码的评论的回应,见shsteimer对这个问题的回答。
我有这个函数在我的代码库,这应该为你工作。
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);
}
也可以看到类似的问题
我在用这个方法
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;
}