【问题标题】:java: write to xml filejava:写入xml文件
【发布时间】:2011-05-30 14:36:32
【问题描述】:

在 java 中我需要创建如下所示的 xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<NikuDataBus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/nikuxog_customObjectInstance.xsd">
    <Header action="write" externalSource="NIKU" objectType="customObjectInstance" version="8.1.0.4247"/>
    <customObjectInstances objectCode="hen_allockey_p">
        <instance instanceCode="MIG5033028" objectCode="hen_allockey_p"
        parentInstanceCode="001260" parentObjectCode="project">
            <CustomInformation>
                <ColumnValue name="hen_from">200801</ColumnValue>
                <ColumnValue name="name">MIG5033028</ColumnValue>
                <ColumnValue name="code">MIG5033028</ColumnValue>
            <OBSAssocs/>
            <Security/>
        </instance>
    </customObjectInstances>
</NikuDataBus>

我在 google 上找到了一些东西,但它不符合我的需求。由于我是 java 新手,我不知道如何适应我的需求。

感谢您的帮助。

【问题讨论】:

  • 那么您的需求是什么?您发现的教程如何与您的需求不符?
  • read excel, write to xml的可能重复
  • @jasso...我认为我需要获取生成上面提到的 xml 文件的源代码 :)...因为我正在处理它 6 天...我有从不使用java,我不知道为什么我的老板让我这样做......这只是我问题的一小部分

标签: java xml xsd


【解决方案1】:

我建议您改用 JAXB。创建类 NikuDataBus、Header、CustomInformation 等。将它们标记为 @XmlEntity。创建和填充对象。

NikyDataBus dataBus = new NikuDataBus();
dataBus.setHeader(....)
//etc, etc....

File f = new File("mydata.xml");
Marshaller m = JAXBContext.newInstance(NikuDataBus.class, Header.class, CustomInformation.class ).createMarshaller().marshal(dataBus, f)

【讨论】:

  • 它看起来不错...但是 JAVA 真的不是我的语言...请您更具体地使用代码...我将非常感谢您的帮助...我很努力很长时间关于这个...谢谢
  • @skaryu - 由于您有一个 XML 模式,您可能会发现从模式生成 JAXB 模型并使用它来进行编组/解组是最容易的。以下是如何执行此操作的示例:bdoughan.blogspot.com/2010/09/…
【解决方案2】:

我对@9​​87654321@ 有很好的体验。您只需制作对象并使用您想要的任何数据填充它们,最后您只需xstream.toXML(object); 即可获取 xml 的字符串。

【讨论】:

  • 如果网站出现故障,就像我正在经历的那样,您已经可以从Wikipedia 学到一些东西。 +1 将 XStream 添加到我的“库”。维姆
【解决方案3】:

不久前我遇到了类似的问题,我使用的网站让我对不同的编码方式有了很好的理解。

This website 为您提供了许多不同的 xml 编码方式:String、DOM、SAX

TransformerFactory transfac = TransformerFactory.newInstance();
        Transformer trans = transfac.newTransformer();
        //create string from xml tree
        StringWriter sw = new StringWriter();
        StreamResult result = new StreamResult(sw);
        DOMSource source = new DOMSource(doc);
        trans.transform(source, result);
        String xmlString = sw.toString();

        //Writing the string to a file
        OutputStream outputStream;
        byte buf[] = xmlString.getBytes();
        outputStream = new FileOutputStream(file);
        for (byte element : buf) {
            outputStream.write(element);
        }
        outputStream.close();
        buf = null;

【讨论】:

  • 谢谢...但是我已经看过那个页面...还有更多...但是我仍然不明白如何编写创建此 xml 文件的脚本跨度>
  • 您是在谈论将其写入文件吗?好像你已经有了 XML 并且你想写入文件?
  • 我需要创建文件然后写在那里
  • 嗯,上面的网站教你如何创建 XML,并编写它:我编辑
【解决方案4】:

看起来您的 XML 是基于 XML 模式 (../xsd/nikuxog_customObjectInstance.xsd)。如果是这种情况,您可以使用XML Beans。给定 XML Schema,XML Beans 将生成一组 Java 类(或 jar 文件),您可以使用它们以编程方式创建 XML。

优点是您的 XML 与您的 XML 模式兼容。我发现这种方法在过去很有用,而且我对 XML Beans 有很好的经验。

【讨论】:

    【解决方案5】:

    我是这样解决的。这是看起来很糟糕的代码,但它对我有用,可能是复制和粘贴导致的一些错误

    public class POIExcelReader {
    
    private void setHenAllocKeyHeader(StringBuilder sb) {
        sb.append ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
                + "<NikuDataBus xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"../xsd/nikuxog_customObjectInstance.xsd\">\r\n"
                + "<Header action=\"write\" externalSource=\"NIKU\"objectType=\"customObjectInstance\" version=\"8.1.0.4247\"/>\r\n"
                + "<customObjectInstances objectCode=\"hen_allockey_p\">\r\n"
                + "<instance instanceCode=\"MIG5033028\" objectCode=\"hen_allockey_p\" parentInstanceCode=\"001260\" parentObjectCode=\"project\">\r\n");
    }
    
    private void setHenAllocKeyBottom (StringBuilder sb) {
        sb.append ("<OBSAssocs/>\r\n"
                +"<Security/>\r\n"
                +"</customObjectInstances>\r\n" 
                + "</NikuDataBus>\r\n");
    }
    
    protected void jobRun() throws Exception {
    
        StringBuilder sb = new StringBuilder();
        setHenAllocKeyHeader(sb);
        String prolog = sb.toString();
    
        sb = new StringBuilder();
        setHenAllocKeyBottom(sb);
        String epilog = sb.toString();
    
    
        FileOutputStream fos = new FileOutputStream("c:\\test\\osem.xml");
        OutputStreamWriter osw = new OutputStreamWriter(fos, Charset.forName("UTF-8"));
        osw.write(prolog);
        osw.write(epilog);
        osw.flush();
        osw.close();
    
    }
    public static void main(String[] args){
    try{
                job.jobRun();
        } catch (Exception e)
        {
            System.out.println("");
        }
    }
    

    【讨论】:

      【解决方案6】:

      您可以使用 GitHub 上提供的 Scilca XML Progression 包。

      Node rootNode = Node.constructNode(<NikuDataBusxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/nikuxog_customObjectInstance.xsd">");
      
      rootNode.addChildNode(Node.constructNode("<Header action="write" externalSource="NIKU" objectType="customObjectInstance" version="8.1.0.4247"/>"));
      
      String customObj = "<customObjectInstances objectCode="hen_allockey_p">" 
                              + "<instance instanceCode="MIG5033028" objectCode="hen_allockey_p" parentInstanceCode="001260" parentObjectCode="project">" 
                              + "<CustomInformation>"
                                    + "<ColumnValue name="hen_from">200801</ColumnValue>"
                                    + "<ColumnValue name="name">MIG5033028</ColumnValue>"
                                    + "<ColumnValue name="code">MIG5033028</ColumnValue>"
                              + "</CustomInformation>"
                              + "<OBSAssocs/><Security/>"
                              + "</instance>"
                              + "</customObjectInstances>"
      
        // Now build to customObject element using a VirtualXML Iterator
      
       XMLIterator xi = new VirtualXML.XMLIterator(customObj);
       Node customO = Node.readFromFile(xi);
      
       rootNode.addChildNode(customO);
      
       Document XmlDocument = new Document(rootNode);
       XmlDocument.addXmlDeclaration(1.0, "UTF-8", null);
      
       XMLWriter xw = XmlDocument.getWriter();
       xw.write("D:/file.txt");
      

      【讨论】:

        猜你喜欢
        • 2012-03-29
        • 2012-11-19
        • 2011-07-21
        • 1970-01-01
        • 2014-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多