Java生成xml四种方式

四种方式生成xml文件:
DOM、SAX(Java提供)
JDOM、DOM4J(第三方提供)

DOM:

  1. 创建一个DocumentBuilderFactory对象,静态方法newInstance()
  2. 创建一个DocumentBuilder对象,DocumentBuilderFactory实例的newDocumentBuilder()方法
  3. 通过DocumentBuilder对象调用newDocument方法,返回一个Document对象
  4. 通过Document对象调用creatElement方法,创建一个节点元素,返回Element对象
    通过Element对象的appendChild方法向该元素添加子元素
    通过Element对象的setAttribute方法,给元素添加属性
    ……
  5. 通过TransformerFactory的静态方法newInstance(),创建TransformerFactory对象
  6. 通过TransformerFactory的newTransformer(),创建Transformer对象
  7. Transformer对象的setOutputProperty(OutputKeys.INDENT,”yes”)方法可以用来换行(可选)
  8. 调用Transformer的transform()方法将创建的XML转换成Result,Result可通过new File()构建输出文件
/**
     * DOM方式创建xml文件
     * @param file 文件
     * @throws Exception
     */
    public static void DOMcreate(File file)throws Exception{
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        DocumentBuilder db=dbf.newDocumentBuilder();
        Document document=db.newDocument();
        document.setXmlStandalone(true);
        Element root=document.createElement("tb_student");
        for (int i = 0; i < 3; i++) {
            Element student=document.createElement("student");
            Element name=document.createElement("name"),
                    age=document.createElement("age"),
                    grade=document.createElement("grade");
                student.setAttribute("id", i+"");
                name.setTextContent("张"+i);
                age.setTextContent(""+i*5);
                grade.setTextContent(""+i*20);
                student.appendChild(name);
                student.appendChild(age);
                student.appendChild(grade);
            root.appendChild(student);
        }
        document.appendChild(root);     
        TransformerFactory tff=TransformerFactory.newInstance();
        Transformer tf=tff.newTransformer();
        tf.setOutputProperty(OutputKeys.INDENT, "yes");
        tf.transform(new DOMSource(document), new StreamResult(file));
    }

SAX:

  1. 用ArrayList存储xml所需的对象集合
  2. 通过SAXTransformerFactory的静态方法newInstance()创建一个SAXTransformerFactory对象
  3. 通过SAXTransformerFactory对象的newTransformerHandler()创建一个TransformerHandler对象
  4. 通过TransformerHandler对象的getTransformer()创建一个Transformer对象
  5. Transformer对象的setOutputProperty(OutputKeys.INDENT,”yes”)可以实现换行(可选)
  6. Transformer对象的setOutputProperty(OutputKeys.ENCODING,”编码名称”)可以实现编码格式(可选)
  7. 创建Result对象,并使用TransformerHandler对象的setResult(Result)方法使其与TransformerHandler关联
  8. 使用TransformerHandler对象的进行xml文件内容的编写(遍历ArrayList创建各个节点)
    startDocument();//开始文档
    endDocument();//结束文档
    startElement(String uri,String localName,String qName,Attributes atts);//元素标签开始
    endElement(String uri,String localName,String qName,Attributes atts);//元素标签结束
    /**
     * SAX方式创建xml文件
     * @param file
     * @throws Exception
     */
    public static void SAXcreate(File file)throws Exception {
        //初始化要生成文件的数据
        ArrayList<Student> students=new ArrayList<Student>();
        for (int i = 0; i < 3; i++) {
            Student student=new Student(i,"张"+i,5*i,10*i);
            students.add(student);
        }

        SAXTransformerFactory stf=(SAXTransformerFactory) SAXTransformerFactory.newInstance();
        TransformerHandler handler=stf.newTransformerHandler();
        Transformer tf=handler.getTransformer();
        tf.setOutputProperty(OutputKeys.INDENT, "yes");//标签自动换行
        tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");//编码格式
        StreamResult result=new StreamResult(file);//创建Result对象
        handler.setResult(result);//关联

        handler.startDocument();
        handler.startElement("", "", "tb_students", null);//根节点标签

        for (Student student : students) {
            AttributesImpl atts=new AttributesImpl();//创建熟悉
            atts.addAttribute("", "", "id", "", student.getId()+"");
            handler.startElement("", "", "student", atts);//元素标签开始

            handler.startElement("", "", "name", null);//元素标签开始
            handler.characters(student.getName().toCharArray(), 0, student.getName().length());//元素标签内容
            handler.endElement("", "", "name");//元素标签结束

            handler.startElement("", "", "age", null);
            handler.characters((""+student.getAge()).toCharArray(), 0, (""+student.getAge()).length());
            handler.endElement("", "", "age");

            handler.startElement("", "", "grade", null);
            handler.characters((""+student.getGrade()).toCharArray(), 0,(""+student.getGrade()).toCharArray().length);
            handler.endElement("", "", "grade");

            handler.endElement("", "", "student");//元素标签结束
        }

        handler.endElement("", "", "tb_students");//结束根节点标签
        handler.endDocument();
    }

实体类student

package entity;

public class Student {

    private int id;
    private String name;
    private int age;
    private int grade;

    public Student() {
        // TODO Auto-generated constructor stub
    }
    public Student(int id, String name, int age, int grade) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.grade = grade;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getGrade() {
        return grade;
    }
    public void setGrade(int grade) {
        this.grade = grade;
    }

}

DOM4J:

  1. 通过DocumentHelper的静态方法createDocument创建一个Document对象
  2. 创建节点:Document对象的addElement方法 返回Element对象
  3. 节点添加属性:Element对象的addAttribute方法
    节点添加内容:Element对象的setTextadd方法
  4. 创建XMLWriter对象 (new) (可使用输出流、OutputFormat作为参数,分别给出输出地址和格式)
    XMLWriter对象的setEscapeText方法可以设置字符是否转义,默认true(转义)
  5. 调用XMLWriter对象的write方法,Document对象作为参数
  6. 关闭XMLWriter对象,以及相关资源的close操作
    /**
     * DOM4J方式创建xml文件
     * @param file
     * @throws Exception
     */
    public static void DOM4Jcreate(File file)throws Exception{
        org.dom4j.Document document=DocumentHelper.createDocument();
        org.dom4j.Element root=document.addElement("rss");
        root.addAttribute("version", "2.0");
        org.dom4j.Element channel=root.addElement("channel");
        org.dom4j.Element title=channel.addElement("title");
        title.setText("新闻国内");
        //...
        XMLWriter writer=new XMLWriter(new FileOutputStream(file),OutputFormat.createPrettyPrint());
        writer.setEscapeText(false);//字符是否转义,默认true
        writer.write(document);
        writer.close();
    }

注:此处模拟的是一个”rss”文件的生成部分代码,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。

JDOM:

  1. 创建Document对象 (new)
  2. 创建Element对象 (new) 并向其中添加属性/内容/子节点
  3. 向Document对象中添加Element节点 addContent/setContent
    (或者创建Document对象时将Element对象作为参数等)
  4. 创建XMLOutputter对象 (new) 并调用output方法生成xml文档
    /**
     * JDOM方式创建xml文件
     * @param file
     * @throws Exception
     */
    public static void JDOMcreate(File file)throws Exception{
        org.jdom2.Document document=new org.jdom2.Document();
        org.jdom2.Element root=new org.jdom2.Element("rss");
        root.setAttribute("version", "2.0");
        root.addContent(
                new org.jdom2.Element("channel").addContent(
                        new org.jdom2.Element("title").setText("新闻国内")));
        document.setRootElement(root);
        XMLOutputter outputter=new XMLOutputter();
        outputter.setFormat(Format.getPrettyFormat());//设置文本格式
        outputter.output(document, new FileOutputStream(file));
    }
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java提供了多种方式生成XML文件。下面介绍两种常用的方式。 1. 使用DOM生成XML文件 DOM是一种树形结构的API,可以通过创建XML文档树来生成XML文件。以下是一个简单的Java代码示例,演示如何使用DOM生成一个名为person.xmlXML文件: ```java import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class GenerateXml { public static void main(String[] args) throws Exception { // 创建XML文档对象和根元素 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument(); Element root = doc.createElement("Person"); doc.appendChild(root); // 添加子元素和文本节点 Element nameNode = doc.createElement("name"); nameNode.appendChild(doc.createTextNode("John")); root.appendChild(nameNode); Element ageNode = doc.createElement("age"); ageNode.appendChild(doc.createTextNode("30")); root.appendChild(ageNode); // 将XML文档保存到文件中 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("person.xml")); transformer.transform(source, result); System.out.println("XML file saved!"); } } ``` 运行该程序将会生成一个名为person.xml的文件,包含以下内容: ```xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Person> <name>John</name> <age>30</age> </Person> ``` 2. 使用JAXB生成XML文件 JAXB是Java Architecture for XML Binding的缩写,可以通过注解将Java对象转换为XML文件。以下是一个简单的Java代码示例,演示如何使用JAXB生成一个名为person.xmlXML文件: ```java import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class GenerateXml { public static void main(String[] args) throws Exception { Person p = new Person("John", 30); // 使用JAXB将对象转换为XML并保存到文件中 JAXBContext context = JAXBContext.newInstance(Person.class); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(p, new File("person.xml")); System.out.println("XML file saved!"); } } ``` 运行该程序将会生成一个名为person.xml的文件,包含以下内容: ```xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <person> <age>30</age> <name>John</name> </person> ``` 可以看到,JAXB将属性按照字母顺序排序,并将Java对象转换为小写的XML元素。如果需要自定义XML元素的名称和属性的顺序,可以使用JAXB注解进行配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值