gpt4 book ai didi

java - 无法从字符串创建 XML 文档

转载 作者:行者123 更新时间:2023-12-01 18:41:15 24 4
gpt4 key购买 nike

我正在尝试从 XML 字符串创建 org.w3c.dom.Document。我正在使用这个How to convert string to xml file in java作为基础。我没有收到异常,问题是我的文档始终为空。 XML 是系统生成的并且格式良好。我希望将其转换为 Document 对象,以便我可以添加新节点等。

public static org.w3c.dom.Document stringToXML(String xmlSource) throws Exception {

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

InputStream input = IOUtils.toInputStream(xmlSource); //uses Apache commons to obtain InputStream
BOMInputStream bomIn = new BOMInputStream(input); //create BOMInputStream from InputStream
InputSource is = new InputSource(bomIn); // InputSource with BOM removed

Document document = builder.parse(new InputSource(new StringReader(xmlSource)));
Document document2 = builder.parse(is);
System.out.println("Document=" + document.getDoctype()); // always null
System.out.println("Document2=" + document2.getDoctype()); // always null

return document;
}

我尝试过以下操作:我创建了一个 BOMInputStream,认为 BOM 导致转换失败。我认为这是我的问题,但将 BOMInputStream 传递给 InputSource 并没有什么区别。我什至尝试传递一个简单 XML 的文字字符串,除了 null 之外什么都没有。 toString 方法返回 [#document:null]

我正在使用 Xpages,这是一个使用 Java 6 的 JSF 实现。Document 类的全名用于避免与同名的 Xpage 相关类混淆。

最佳答案

不要依赖 toString 告诉您的内容。它提供了它认为对当前类有用的诊断信息,在这种情况下,仅此而已......

"["+getNodeName()+": "+getNodeValue()+"]";

这对你没有帮助。相反,您需要尝试将模型转换回 String,例如...

String text
= "<fruit>"
+ "<banana>yellow</banana>"
+ "<orange>orange</orange>"
+ "<pear>yellow</pear>"
+ "</fruit>";

InputStream is = null;
try {
is = new ByteArrayInputStream(text.getBytes());
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

Document document = builder.parse(is);
System.out.println("Document=" + document.toString()); // always null

Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");
tf.setOutputProperty(OutputKeys.METHOD, "xml");
tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

ByteArrayOutputStream os = null;
try {

os = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(document);
StreamResult sr = new StreamResult(os);
tf.transform(domSource, sr);

System.out.println(new String(os.toByteArray()));

} finally {
try {
os.close();
} finally {
}
}

} catch (ParserConfigurationException | SAXException | IOException | TransformerConfigurationException exp) {
exp.printStackTrace();
} catch (TransformerException exp) {
exp.printStackTrace();
} finally {
try {
is.close();
} catch (Exception e) {
}
}

哪个输出...

Document=[#document: null]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<fruit>
<banana>yellow</banana>
<orange>orange</orange>
<pear>yellow</pear>
</fruit>

关于java - 无法从字符串创建 XML 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19917870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com