2017-02-28 81 views
0

我正在构建一个简单的java程序来创建XML文件。 我建立这个代码:如何从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(); 
     } 
    } 

但是,如果我尝试启动这个代码,我有这样的错误:

Exception in thread "AWT-EventQueue-0" java.lang.AbstractMethodError: gnu.xml.dom.DomDocument.getXmlStandalone()Z at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO.java:377) at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:131) at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:98) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:702) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:746) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:359) at supporto.Utility.creaXMLOrdine(Utility.java:142) at PanelFornitoriClienti.PanelNuovoOrdine.inviaOrdineXFile(PanelNuovoOrdine.java:461) at PanelFornitoriClienti.PanelNuovoOrdine$10.actionPerformed(PanelNuovoOrdine.java:776) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.Component.processMouseEvent(Component.java:6516) at javax.swing.JComponent.processMouseEvent(JComponent.java:3320) at java.awt.Component.processEvent(Component.java:6281) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4872) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4698) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4698) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:708) at java.awt.EventQueue$4.run(EventQueue.java:706) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

+3

可能有[exception creati ng xml文件](http://stackoverflow.com/questions/11448336/exception-creating-xml-file) – Idos

+0

哪一行是“Utility.creaXMLOrdine(Utility.java:142)”? – c0der

+0

英文变量名会使代码更容易理解。 –

回答

1

看是否有此帮助:

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>