如何从java创建xml文件

如何从java创建xml文件,java,xml,xml-parsing,Java,Xml,Xml Parsing,我正在构建一个简单的java程序来创建XML文件。 我正在构建此代码: public static void creaXMLOrdine(OrdiniNuovo ordine,String codiceNegozio, String pathFile){ try{ DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();

我正在构建一个简单的java程序来创建XML文件。 我正在构建此代码:

public static void creaXMLOrdine(OrdiniNuovo ordine,String codiceNegozio,
            String pathFile){
        try{
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

            Document doc = docBuilder.newDocument();
            Element rootElement = doc.createElement("ORDER");
            doc.appendChild(rootElement);

            Element info = doc.createElement("INFO");
            rootElement.appendChild(info);

            Attr attr = doc.createAttribute("id");
            attr.setValue(ordine.getCodiceOrdine()+"");
            info.setAttributeNode(attr);

            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            String nomeFile = pathFile+codiceNegozio+"_"+ordine.getCodiceOrdine()+".xml";
            StreamResult result = new StreamResult(new File(nomeFile));

            // Output to console for testing
            // StreamResult result = new StreamResult(System.out);

            transformer.transform(source, result);

            System.out.println("File saved!");
        }catch(Exception e){
            log.logStackTrace(e);
            VisualMessage.getErrore();
        }
    }
但如果我尝试启动此代码,则会出现以下错误:

线程AWT-EventQueue-0 java.lang.AbstractMethodError中出现异常:gnu.xml.dom.DomDocument.getXmlStandaloneZ 位于com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfoDOM2TO.java:377 位于com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parseDOM2TO.java:131 位于com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parseDOM2TO.java:98 位于com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentityTransformerImpl.java:702 www.com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.TransformerImpl.java:746 位于com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.TransformerImpl.java:359 位于supporto.Utility.creaXMLOrdineUtility.java:142 在PanelFornitoriClienti.PanelNuovoOrdine.inviaOrdineXFilePanelNuovoOrdine.java:461 在PanelFornitoriClienti.PanelNuovoOrdine$10.actionPerformedPanelNuovoOrdine.java:776 在javax.swing.AbstractButton.fireActionPerformedAbstractButton.java:2018 位于javax.swing.AbstractButton$Handler.actionPerformedAbstractButton.java:2341 位于javax.swing.DefaultButtonModel.fireActionPerformedDefaultButtonModel.java:402 在javax.swing.DefaultButtonModel.setPressedDefaultButtonModel.java:259 java:252 在java.awt.AWTEventMulticaster.mouseReleasedAWTEventMulticaster.java:289 在java.awt.AWTEventMulticaster.mouseReleasedAWTEventMulticaster.java:289 位于java.awt.Component.processMouseEventComponent.java:6516 javax.swing.JComponent.processMouseEventJComponent.java:3320 位于java.awt.Component.processEventComponent.java:6281 在java.awt.Container.processEventContainer.java:2229 位于java.awt.Component.dispatchEventImplComponent.java:4872 位于java.awt.Container.dispatchEventImplContainer.java:2287 位于java.awt.Component.dispatchEventComponent.java:4698 位于java.awt.LightweightDispatcher.retargetMouseEventContainer.java:4832 位于java.awt.LightweightDispatcher.processMouseEventContainer.java:4492 位于java.awt.LightweightDispatcher.dispatchEventContainer.java:4422 位于java.awt.Container.dispatchEventImplContainer.java:2273 在java.awt.Window.dispatchEventImplWindow.java:2719 位于java.awt.Component.dispatchEventComponent.java:4698 在java.awt.EventQueue.dispatchEventImplEventQueue.java:735 在java.awt.EventQueue.access$200EventQueue.java:103 在java.awt.EventQueue$3.runEventQueue.java:694 位于java.awt.EventQueue$3.runEventQueue.java:692 位于java.security.AccessController.doPrivilegeEdNative方法 java.security.ProtectionDomain$1.doIntersectionPrivilegeProtectionDomain.java:76 java.security.ProtectionDomain$1.doIntersectionPrivilegeProtectionDomain.java:87 在java.awt.EventQueue$4.runEventQueue.java:708 在java.awt.EventQueue$4.runEventQueue.java:706 位于java.security.AccessController.doPrivilegeEdNative方法 java.security.ProtectionDomain$1.doIntersectionPrivilegeProtectionDomain.java:76 位于java.awt.EventQueue.dispatchEventQueue.java:705 位于java.awt.EventDispatchThread.pumpOneEventForFiltersEventDispatchThread.java:242 在java.awt.EventDispatchThread.pumpEventsForFilterEventDispatchThread.java:161 在java.awt.EventDispatchThread.PumpeEventsForHierarchyEventDispatchThread.java:150 在java.awt.EventDispatchThread.pumpEventsEventDispatchThread.java:146 在java.awt.EventDispatchThread.pumpEventsEventDispatchThread.java:138 在java.awt.EventDispatchThread.runEventDispatchThread.java:91

请参阅此帮助:

public class UtilsXML {

    private static Document doc;

    // Root "ORDER"
    public static Element addRoot(String rootName) {
        Element root = doc.createElement(rootName);
        doc.appendChild(root);
        return root;
    }

    // Elements inside ROOT like INFO, OTHERS
    public static Element addElement(String rootName, Element root) {
        Element e = doc.createElement(rootName);
        root.appendChild(e);
        return e;
    }

    // Elements inside other elements INFO -> Id, Value
    public static void addNode(Element e, String tagName, String content) {
        Element employ = doc.createElement(tagName);
        employ.appendChild(doc.createTextNode(content));
        e.appendChild(employ);
    }

    // Document
    public static void makeDoc() throws ParserConfigurationException {
        DocumentBuilderFactory dF = DocumentBuilderFactory.newInstance();
        DocumentBuilder docB = dF.newDocumentBuilder();
        doc = docB.newDocument();       
    }

    // Save the xml file
    public static void makeFile(String filePath) throws TransformerException {
        TransformerFactory tF = TransformerFactory.newInstance();
        Transformer t = tF.newTransformer();
        DOMSource source = new DOMSource(doc);
        File xml = new File(filePath);
        StreamResult r = new StreamResult(xml);
        t.transform(source, r);
    }
}
例如:

    try {
        UtilsXML.makeDoc();

        Element order = UtilsXML.addRoot("ORDER");

        Element info = UtilsXML.addElement("INFO", order);
        UtilsXML.addNode(info, "Id", "123456");
        UtilsXML.addNode(info, "Value", "99999");

        Element other = UtilsXML.addElement("OTHERS", order);
        UtilsXML.addNode(other, "Date", "01/01/2017");
        UtilsXML.addNode(other, "Status", "Finish");            

        UtilsXML.makeFile("c:/opensource/myXml.xml");
    } catch (ParserConfigurationException e) {          
        e.printStackTrace();
    }
<ORDER>
    <INFO>
        <Id>123456</Id>
        <Value>99999</Value>
    </INFO>
    <OTHERS>
        <Date>01/01/2017</Date>
        <Status>Finish</Status>
    </OTHERS>
</ORDER>

哪一行可能是Utility.creaXMLOrdineUtility.java:142?英文变量名会使代码更容易理解。