如何在java中使用DomParser将xml解析为Doc?
问题描述:
我想解析文件大小为10MB的文档。实际上,它之前是解析的。现在,我得到了文档的空对象。不要在错误的地方出错。请找到我的解决方案。如何在java中使用DomParser将xml解析为Doc?
class Parser {
Document doc;
Parser() {
doc = null;
}
public void readXmlToDom(String path, String uuid) {
try {
DocumentBuilderFactory documentBuilderFactory =
DocumentBuilderFactory.newInstance();
InputStream inputStream = new FileInputStream(new File(path));
doc =
documentBuilderFactory.newDocumentBuilder().parse(inputStream);
}
catch (SAXException | IOException | ParserConfigurationExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(doc);
}
}
一切工作正常,除非我以空对象结束..请解决这个问题的任何人。 在此先感谢,
答
您需要serialize
该文档如果你想这样输出。
你可以做这样的说法:
public static byte[] serializeDOM(Document doc) throws TransformerFactoryConfigurationError, TransformerException {
ByteArrayOutputStream os = null;
try {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
DOMSource source = new DOMSource(doc);
os = new ByteArrayOutputStream();
StreamResult result = new StreamResult(os);
transformer.transform(source, result);
return os.toByteArray();
} finally {
IOUtils.closeQuietly(os);
}
}
做它你这样做会一直输出“空”(这并不意味着该对象是null
)的方式。
此外,您应该将InputStream
包装在BufferedInputStream
中,并在完成后将其正确关闭。
你怎么知道它是一个空对象? – skaffman
你是否看到任何异常?你的“路径”是否合适? – adarshr
根据你想要达到的目标,你最终应该考虑使用SAXParser而不是DOMParser,因为它的内存消耗很大(看你的10MB文件)。 默认情况下,doc将为空 - 不需要init在构造函数中... – quaylar