如何在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); 
    } 
} 

一切工作正常,除非我以空对象结束..请解决这个问题的任何人。 在此先感谢,

+0

你怎么知道它是一个空对象? – skaffman

+0

你是否看到任何异常?你的“路径”是否合适? – adarshr

+0

根据你想要达到的目标,你最终应该考虑使用SAXParser而不是DOMParser,因为它的内存消耗很大(看你的10MB文件)。 默认情况下,doc将为空 - 不需要init在构造函数中... – quaylar

您需要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中,并在完成后将其正确关闭。