[英]How to create xml file from java
我正在構建一個創建XML文件的簡單Java程序。 我正在構建此代碼:
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:com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO中的gnu.xml.dom.DomDocument.getXmlStandalone()Z .java:377)(位於com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:131),位於com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:702)的.parse(DOM2TO.java:98)com.sun.org.apache.xalan.internal.xsltc的.parse(DOM2TO.java:98) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:359)上的.trax.TransformerImpl.transform(TransformerImpl.java:746),位於supporto.Utility.creaXMLOrdine(Utility.java :142)在PanelFornitoriClienti.PanelNuovoOrdine.inviaOrdineXFile(PanelNuovoOrdine.java:461)在PanelFornitoriClienti.PanelNuovoOrdine $ 10.actionPerformed(PanelNuovoOrdine.java:776)在javax.swing.AbstractButton.fireActionPerwings:2018。 AbstractButton $韓 dler.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 java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)的.mouseReleased(BasicButtonListener.java:252)java.awt.Component.processMouseEvent(Component)的java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)的。的javax.swing.JComponent.processMouseEvent(JComponent.java:3320)處的java:6516)的java.awt.Container.processEvent(Container.java:2229)處的java.awt.Component.processEvent(Component.java:6281)處java.awt.LightweightDispatcher上的java.awt.Component.dispatchEvent(Component.java:4698)上的java.awt.Container.dispatchEventImpl(Container.java:2287)上的java.awt.Component.dispatchEventImpl(Component.java:4872) .retargetMouseEvent(Container.java:4832),位於java.awt.LightweightDispatcher.processMouseEvent(Container。 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)at java.awt.Container.dispatchEventImpl(Container.java:2273)at java.awt.Window.dispatchEventImpl(Window.java:2719) java.awt.EventQueue.access $ 200(EventQueue.java:103)處的java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)處的java.awt.Component.dispatchEvent(Component.java:4698)。 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),位於java.security.AccessController.doPrivileged(本機方法),位於java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76),位於java.awt.EventQueue.dispatchEvent(事件隊列)。 位於java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)處的java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)處的java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)上的java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)at java.awt.EventDispatchThread.run(EventDispatchThread.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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.