当前位置: 首页 > 知识库问答 >
问题:

如何从java创建xml文件

齐胜涝
2023-03-14

我正在构建一个创建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:gnu。xml。dom。DomDocument。com上的getXmlStandalone()Z。太阳组织。阿帕奇。泽兰。内部的xsltc。特拉克斯。DOM2TO。com上的setDocumentInfo(DOM2TO.java:377)。太阳组织。阿帕奇。泽兰。内部的xsltc。特拉克斯。DOM2TO。在com上解析(DOM2TO.java:131)。太阳组织。阿帕奇。泽兰。内部的xsltc。特拉克斯。DOM2TO。在com上解析(DOM2TO.java:98)。太阳组织。阿帕奇。泽兰。内部的xsltc。特拉克斯。TransformerImpl。com上的transformIdentity(TransformerImpl.java:702)。太阳组织。阿帕奇。泽兰。内部的xsltc。特拉克斯。TransformerImpl。com上的transform(TransformerImpl.java:746)。太阳组织。阿帕奇。泽兰。内部的xsltc。特拉克斯。TransformerImpl。supporto上的transform(TransformerImpl.java:359)。公用事业位于PanelFornitoriClienti的creaXMLOrdine(Utility.java:142)。PanelNuovoOrdine。PanelFornitoriClienti上的InviaOrdinex文件(PanelNuovoOrdine.java:461)。PanelNuovoOrdine 10美元。在javax上执行的操作(PanelNuovoOrdine.java:776)。摆动AbstractButton。fireActionPerformed(AbstractButton.java:2018)在javax上。摆动AbstractButton$处理程序。在javax上执行的操作(AbstractButton.java:2341)。摆动默认按钮模式。fireActionPerformed(DefaultButtonModel.java:402)在javax上。摆动默认按钮模式。在javax上按下setPressed(DefaultButtonModel.java:259)。摆动plaf。基本的基本按钮侦听器。在java上释放鼠标(BasicButtonListener.java:252)。awt。AWTEventMulticaster。在java上释放鼠标(AWTEventMulticaster.java:289)。awt。AWTEventMulticaster。在java上释放鼠标(AWTEventMulticaster.java:289)。awt。组成部分javax上的ProcessMouseeEvent(组件:6516)。摆动J组件。java上的processMouseEvent(JComponent.java:3320)。awt。组成部分java上的processEvent(组件java:6281)。awt。容器java上的processEvent(Container.java:2229)。awt。组成部分java上的dispatchEventImpl(组件:4872)。awt。容器java上的dispatchEventImpl(Container.java:2287)。awt。组成部分java上的dispatchEvent(组件:4698)。awt。LightweightDispatcher。java上的retargetMouseEvent(Container.java:4832)。awt。LightweightDispatcher。java上的ProcessMouseeEvent(Container.java:4492)。awt。LightweightDispatcher。java上的dispatchEvent(Container.java:4422)。awt。容器java上的dispatchEventImpl(Container.java:2273)。awt。窗java上的dispatchEventImpl(Window.java:2719)。awt。组成部分java上的dispatchEvent(组件:4698)。awt。事件队列。java上的dispatchEventImpl(EventQueue.java:735)。awt。事件队列。在java上访问200美元(EventQueue.java:103)。awt。EventQueue 3美元。在java上运行(EventQueue.java:694)。awt。EventQueue 3美元。在java上运行(EventQueue.java:692)。安全AccessController。java上的doPrivileged(本机方法)。安全ProtectionDomain$1。java上的doIntersectionPrivilege(ProtectionDomain.java:76)。安全ProtectionDomain$1。java上的doIntersectionPrivilege(ProtectionDomain.java:87)。awt。EventQueue 4美元。在java上运行(EventQueue.java:708)。awt。EventQueue 4美元。在java上运行(EventQueue.java:706)。安全AccessController。java上的doPrivileged(本机方法)。安全ProtectionDomain$1。java上的doIntersectionPrivilege(ProtectionDomain.java:76)。awt。事件队列。java上的dispatchEvent(EventQueue.java:705)。awt。EventDispatchThread。java上的pumpOneEventForFilters(EventDispatchThread.java:242)。awt。EventDispatchThread。java上的pumpEventsForFilter(EventDispatchThread.java:161)。awt。EventDispatchThread。java上的pumpEventsForHierarchy(EventDispatchThread.java:150)。awt。EventDispatchThread。java上的pumpEvents(EventDispatchThread.java:146)。awt。EventDispatchThread。java上的pumpEvents(EventDispatchThread.java:138)。awt。EventDispatchThread。运行(EventDispatchThread.java:91)

共有1个答案

张可人
2023-03-14

看看这是否有帮助:

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>
 类似资料:
  • 在进行了一些程序内操作之后,我最终得到了一个包含我要执行的变更日志的xom文档对象。根据我的理解,我必须在ChangeLogParser的帮助下将其转换为liquibase XML格式ParsedNode。但该接口在parse方法中假设一个外部表示形式。使用ResourceAccessor将Document对象注入解析器也是不可能的,因为方法getResourcesAsStream返回一组Inpu

  • 问题内容: 我想知道如何从json文件或xml文件创建对象类? 例如: 我从webservice获取此json文件: 我想创建一个像这样的类: NB : 我的问题不是如何在vb.net 中序列化/反序列化json objet 吗? 我的xml文件没有XSD,为什么会更困难 我的代码是用VB.Net而不是C#编写的。我发现许多网站将json转换为c#(http://json2csharp.com/)

  • 问题内容: 目前,我正在用Java创建XML文件,并通过使用XSL / XSLT进行转换将其显示在JSP页面中。现在,我需要获取该XML文件并在PDF中显示相同的信息。有什么办法可以通过使用某种XSL文件来做到这一点? 我已经看过iText Java-PDF库,但是找不到任何将其用于XML和样式表的方法。 任何帮助将不胜感激。提前致谢! 问题答案: 您可以使用XSL格式对象。这里有一些很好的文章,

  • 我想用每个文件(不是类文件)从我的项目中创建一个源JAR文件。你知道吗?

  • 我是一个xml和XSL的新手,使用遗留平台... 我正在寻找一个从XPath创建xml的解决方案。碰巧看到这篇文章如何从一组XPath表达式生成XML文件?帮了我大忙。 与“comments”一节中讨论的请求类似,我试图将整个XSLT作为字符串传递,并使用Saxon作为sting back接收结果。接收结果为字符串,没有问题。但是当将XSL作为字符串传递时,它会抱怨“document()”,它是

  • 问题内容: 创建战争文件(使用eclipse)以在tomcat上运行的最佳实践是什么?教程,链接,示例受到高度赞赏。 问题答案: 你可以使用Ant来设置,编译,WAR和部署你的解决方案。 然后,你可以在Eclipse中执行一键操作以运行该Ant目标。以下是每个步骤的示例: 前提条件 我们假设你的代码组织如下: :Java文件,属性,XML配置文件 :你的JSP文件 :运行时所需的任何JAR :你的