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 main(String [] args) {
		DOMcreate(new File("dom.xml"));
	}
    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对象的 setText add 方法
  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));
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值