用java格式化XML文件

用java格式化XML文件,java,xml,dom,Java,Xml,Dom,我已经创建了一个xml,我不得不使用PrintWriter类修改它。(逐行复制xml文件并修改所需内容)但我丢失了缩进 我试过这个: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = buil

我已经创建了一个xml,我不得不使用
PrintWriter
类修改它。(逐行复制xml文件并修改所需内容)但我丢失了缩进
我试过这个:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = factory.newDocumentBuilder();
                Document document = builder.parse(new InputSource(new InputStreamReader(new FileInputStream(
                    "notes.xml"))));

                Transformer xformer = TransformerFactory.newInstance().newTransformer();
                xformer.setOutputProperty(OutputKeys.METHOD, "xml");
                xformer.setOutputProperty(OutputKeys.INDENT, "yes");
                xformer.setOutputProperty("b;http://xml.apache.org/xsltd;indent-amount", "4");
                //xformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
                Source source = new DOMSource(document);
                Result result = new StreamResult(new File("notes.xml"));
                xformer.transform(source, result);
但这不起作用:第三行出现异常:

[Fatal Error] :3:6537: XML document structures must start and end within the same entity.
org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 6537; XML document structures must start and end within the same entity.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
那么,有没有办法用java格式化已经创建的XML文件?


“第三行出现异常”是什么?我会把它添加到question@MadProgrammer完成!(我确信xml的状态良好)您的xml格式不好。也许你应该重新考虑使用
PrintWriter
来编写它,而不是使用
文档
。您可能还想发布XML,我将创建一个XSD文件,使用XJC生成类,并以这种方式修改XML。。。更简单,更不容易出错,并且可以选择以漂亮的格式输出XML。