使用apache公理生成示例xml文件

时间:2014-02-12 10:47:45

标签: java xml apache axiom

请帮助使用apache axiom生成xml文件,任何包含一个父标记和两个子标记的xml文件,我尝试了以下代码

OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace ns1 = factory.createOMNamespace("bar","x");
OMElement root = factory.createOMElement("root",ns1);
OMNamespace ns2 = root.declareNamespace("bar1","y");
OMElement elt1 = factory.createOMElement("foo",ns1);
OMElement elt2 = factory.createOMElement("yuck",ns2);
OMText txt1 = factory.createOMText(elt2,"blah");
elt2.addChild(txt1);
elt1.addChild(elt2);
root.addChild(elt1);

请帮我如何序列化根元素,其中OMElment是非序列化api类。 请帮我举个例子。

1 个答案:

答案 0 :(得分:3)

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

import javax.xml.stream.XMLStreamException;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMText;


public class Example {
    public static void main(String[] args) {
       try {
            OMFactory factory = OMAbstractFactory.getOMFactory();

            OMNamespace ns1 = factory.createOMNamespace("bar", "x");
            OMElement root = factory.createOMElement("root", ns1);
            OMNamespace ns2 = root.declareNamespace("bar1", "y");

            OMElement elt1 = factory.createOMElement("foo", ns1);
            OMElement elt2 = factory.createOMElement("yuck", ns2);
            OMElement elt3 = factory.createOMElement("yuck2", ns2);

            OMText txt1 = factory.createOMText(elt2, "blah");
            OMText txt2 = factory.createOMText(elt3, "blah-blah");

            elt2.addChild(txt1);
            elt3.addChild(txt2);
            elt1.addChild(elt2);
            elt1.addChild(elt3);

            root.addChild(elt1);    

            OutputStream outputStream = null;
            try {
                outputStream = new FileOutputStream("C:\\xml.xml");
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            root.serialize(outputStream); 

            root.serialize(System.out);

        } catch (XMLStreamException e) {
            e.printStackTrace();
        }
    }
}

控制台输出:

<x:root xmlns:x="bar" xmlns:y="bar1"><x:foo><y:yuck>blah</y:yuck><y:yuck2>blah-blah</y:yuck2></x:foo></x:root>

序列化文件:

<x:root xmlns:x="bar" xmlns:y="bar1">
    <x:foo>
        <y:yuck>blah</y:yuck>
        <y:yuck2>blah-blah</y:yuck2>
    </x:foo>
</x:root>       

了解更多详情