本文介紹了無法從字符串創(chuàng)建XML文檔的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我正在嘗試創(chuàng)建一個org.w3c.dom.Document形式的XML字符串。我用這個How to convert string to xml file in java作為基礎(chǔ)。我沒有得到例外,問題是我的文檔總是空的。XML是系統(tǒng)生成的,格式良好。我希望將其轉(zhuǎn)換為Document對象,以便可以添加新節(jié)點等。
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;
}
我嘗試過這些方法:我創(chuàng)建了一個BOMInputStream,認為BOM導(dǎo)致轉(zhuǎn)換失敗。我認為這是我的問題,但是將BOMInputStream傳遞給InputSource并沒有什么不同。我甚至嘗試傳遞一個由簡單XML和NULL組成的文字字符串。toString方法返回[#document:null]
我使用的是XPages,這是一個使用Java6的jsf實現(xiàn)。用于避免念力與Xpage相關(guān)類同名的Document類的全名。
推薦答案
不要依賴toString
告訴您的內(nèi)容。它提供它認為對當(dāng)前類有用的診斷信息,在本例中,它就是.
"["+getNodeName()+": "+getNodeValue()+"]";
這對你沒有幫助。相反,您需要嘗試將模型轉(zhuǎn)換回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>
這篇關(guān)于無法從字符串創(chuàng)建XML文檔的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,