生成XML文档

JAVA操作XML文档主要有四种方式,分别是DOM、SAX、JDOM和DOM4J,DOM和SAX是官方提供的,而JDOM和DOM4J则是引用第三方库的,其中用的最多的是DOM4J方式。运行效率和内存使用方面最优的是SAX,但是由于SAX是基于事件的方式,所以SAX无法在编写XML的过程中对已编写内容进行修改,但对于不用进行频繁修改的需求,还是应该选择使用SAX。

现在来生成这样的一份XML文档,文档内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<bookList>
    <book id="one">
        <name>one book</name>
        <year>2017</year>
        <author>tom</author>
    </book>
    <book id="two">
        <name>two book</name>
        <year>2018</year>
        <author>jim</author>
    </book>
</bookList>

  

第一,使用DOM的方式生成。

 1 package xmls;
 2 import org.w3c.dom.Document;
 3 import org.w3c.dom.Element;
 4 import javax.xml.parsers.DocumentBuilder;
 5 import javax.xml.parsers.DocumentBuilderFactory;
 6 import javax.xml.parsers.ParserConfigurationException;
 7 import javax.xml.transform.OutputKeys;
 8 import javax.xml.transform.Transformer;
 9 import javax.xml.transform.TransformerException;
10 import javax.xml.transform.TransformerFactory;
11 import javax.xml.transform.dom.DOMSource;
12 import javax.xml.transform.stream.StreamResult;
13 import java.io.File;
14 /**
15  * Created by lenovo on 2017-6-3.
16  */
17 public class DOMDemo {
18     public static void main(String[] args){
19         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
20         try {
21             DocumentBuilder db = dbf.newDocumentBuilder();
22             //创建文档
23             Document document = db.newDocument();
24             //设置Standalone为no
25             document.setXmlStandalone(true);
26             //生成根节点
27             Element bookList = document.createElement("bookList");
28             //生成第一本书
29             Element bookOne = document.createElement("book");
30             bookOne.setAttribute("id", "one");
31             //生成第一本书的名字
32             Element nameOne = document.createElement("name");
33             nameOne.setTextContent("one book");
34             bookOne.appendChild(nameOne);
35             //生成第一本书的年份
36             Element yearOne = document.createElement("year");
37             yearOne.setTextContent("2017");
38             bookOne.appendChild(yearOne);
39             //生成第一本书的作者
40             Element authorOne = document.createElement("author");
41             authorOne.setTextContent("tom");
42             bookOne.appendChild(authorOne);
43             //生成第二本书
44             Element bookTwo = document.createElement("book");
45             bookTwo.setAttribute("id", "two");
46             //生成第二本书的名字
47             Element nameTwo = document.createElement("name");
48             nameTwo.setTextContent("two book");
49             bookTwo.appendChild(nameTwo);
50             //生成第二本书的年份
51             Element yearTwo = document.createElement("year");
52             yearTwo.setTextContent("2016");
53             bookTwo.appendChild(yearTwo);
54             //生成第二本书的作者
55             Element authorTwo = document.createElement("author");
56             authorTwo.setTextContent("jim");
57             bookTwo.appendChild(authorTwo);
58             //将book节点添加到bookList节点中
59             bookList.appendChild(bookOne);
60             bookList.appendChild(bookTwo);
61             //将根节点添加到文档中
62             document.appendChild(bookList);
63             //DOM创建XML文档需要使用TransformerFactory创建实例对象
64             TransformerFactory tff = TransformerFactory.newInstance();
65             //创建Transformer对象
66             Transformer tf = tff.newTransformer();
67             //设置换行
68             tf.setOutputProperty(OutputKeys.INDENT, "yes");
69             //调用Transformer对象的transform方法生成XML文档
70             tf.transform(new DOMSource(document), new StreamResult(new File("src\\xmls\\DOM.xml")));
71         }catch (ParserConfigurationException e){
72             e.printStackTrace();
73         }catch (TransformerException e){
74             e.printStackTrace();
75         }
76     }
77 }

第二,使用SAX的方式生成。

 1 package xmls;
 2 import org.xml.sax.SAXException;
 3 import org.xml.sax.helpers.AttributesImpl;
 4 import javax.xml.transform.OutputKeys;
 5 import javax.xml.transform.Result;
 6 import javax.xml.transform.Transformer;
 7 import javax.xml.transform.TransformerConfigurationException;
 8 import javax.xml.transform.sax.SAXTransformerFactory;
 9 import javax.xml.transform.sax.TransformerHandler;
10 import javax.xml.transform.stream.StreamResult;
11 import java.io.File;
12 import java.io.FileNotFoundException;
13 import java.io.FileOutputStream;
14 import java.io.IOException;
15 /**
16  * Created by lenovo on 2017-6-3.
17  */
18 public class SAXDemo {
19     public static void main(String[] args){
20         SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory
21                 .newInstance();
22         try {
23             TransformerHandler handler = tff.newTransformerHandler();
24             Transformer tr = handler.getTransformer();
25             tr.setOutputProperty(OutputKeys.INDENT, "yes");
26             File f = new File("src/xmls/SAX.xml");
27             if (!f.exists()) {
28                 f.createNewFile();
29             }
30             // 6.创建Result对象,并且使其与handler关联
31             Result result = new StreamResult(new FileOutputStream(f));
32             handler.setResult(result);
33             // 7.利用handler对象进行xml文件内容的编写O
34             // 打开document
35             handler.startDocument();
36             AttributesImpl attr = new AttributesImpl();
37             handler.startElement("", "", "bookList", attr);
38             attr.clear();
39             attr.addAttribute("", "", "id", "", "one");
40             handler.startElement("", "", "book", attr);
41             attr.clear();
42             handler.startElement("", "", "name", attr);
43             String title = "one book";
44             handler.characters( title.toCharArray(), 0, title.length() );
45             handler.endElement("", "", "name");
46             handler.startElement("", "", "year", attr);
47             String year = "2017";
48             handler.characters(year.toCharArray(), 0, year.length());
49             handler.endElement("", "", "year");
50             handler.startElement("", "", "author", attr);
51             String author = "tom";
52             handler.characters(author.toCharArray(), 0, author.length());
53             handler.endElement("", "", "author");
54             handler.endElement("", "", "book");
55             attr.clear();
56             attr.addAttribute("", "", "id", "", "two");
57             handler.startElement("", "", "book", attr);
58             attr.clear();
59             handler.startElement("", "", "name", attr);
60             title = "two book";
61             handler.characters( title.toCharArray(), 0, title.length() );
62             handler.endElement("", "", "name");
63             handler.startElement("", "", "year", attr);
64             year = "2016";
65             handler.characters(year.toCharArray(), 0, year.length());
66             handler.endElement("", "", "year");
67             handler.startElement("", "", "author", attr);
68             author = "jim";
69             handler.characters(author.toCharArray(), 0, author.length());
70             handler.endElement("", "", "author");
71             handler.endElement("", "", "book");
72             handler.endElement("", "", "bookList");
73             // 关闭document
74             handler.endDocument();
75         }catch (TransformerConfigurationException e) {
76             e.printStackTrace();
77         } catch (FileNotFoundException e) {
78             e.printStackTrace();
79         } catch (IOException e) {
80             e.printStackTrace();
81         } catch (SAXException e) {
82             e.printStackTrace();
83         }
84     }
85 }

第三,使用JDOM的方式。

 1 package xmls;
 2 import org.jdom2.Document;
 3 import org.jdom2.Element;
 4 import org.jdom2.output.Format;
 5 import org.jdom2.output.XMLOutputter;
 6 import java.io.File;
 7 import java.io.FileNotFoundException;
 8 import java.io.FileOutputStream;
 9 import java.io.IOException;
10 /**
11  * Created by lenovo on 2017-6-3.
12  */
13 public class JDOMDemo {
14     public static void main(String[] args){
15         Element bookList = new Element("bookList");
16         Document document = new Document(bookList);
17         Element book = new Element("book");
18         book.setAttribute("id", "one");
19         Element name = new Element("name");
20         name.setText("one book");
21         book.addContent(name);
22         Element year = new Element("year");
23         year.setText("2017");
24         book.addContent(year);
25         Element author = new Element("author");
26         author.setText("tom");
27         book.addContent(author);
28         bookList.addContent(book);
29         book = new Element("book");
30         book.setAttribute("id", "two");
31         name = new Element("name");
32         name.setText("two book");
33         book.addContent(name);
34         year = new Element("year");
35         year.setText("2016");
36         book.addContent(year);
37         author = new Element("author");
38         author.setText("jim");
39         book.addContent(author);
40         bookList.addContent(book);
41
42
43         Format format = Format.getCompactFormat();
44         format.setIndent("");
45         XMLOutputter outputer = new XMLOutputter(format);
46         try {
47             //5.利用outputer将document对象转换成xml文档
48             outputer.output(document, new FileOutputStream(new File("src/xmls/JDOM.xml")));
49         } catch (FileNotFoundException e) {
50             e.printStackTrace();
51         } catch (IOException e) {
52             e.printStackTrace();
53         }
54     }
55 }

第四,使用DOM4J的方式生成。

 1 package xmls;
 2 import org.dom4j.Document;
 3 import org.dom4j.DocumentHelper;
 4 import org.dom4j.Element;
 5 import org.dom4j.io.OutputFormat;
 6 import org.dom4j.io.XMLWriter;
 7 import java.io.File;
 8 import java.io.FileOutputStream;
 9 import java.io.IOException;
10 /**
11  * Created by lenovo on 2017-6-3.
12  */
13 public class DOM4JDemo {
14     public static void main(String[] args){
15         Document document = DocumentHelper.createDocument();
16         Element bookList = document.addElement("bookList");
17         Element bookOne = bookList.addElement("book");
18         bookOne.addAttribute("id", "one");
19         Element nameOne = bookOne.addElement("name");
20         nameOne.setText("one book");
21         Element yearOne = bookOne.addElement("year");
22         yearOne.setText("2017");
23         Element authorOne = bookOne.addElement("author");
24         authorOne.setText("tom");
25         Element bookTwo = bookList.addElement("book");
26         bookTwo.addAttribute("id", "two");
27         Element nameTwo = bookTwo.addElement("name");
28         nameTwo.setText("two book");
29         Element yearTwo = bookTwo.addElement("year");
30         yearTwo.setText("2016");
31         Element authorTwo = bookTwo.addElement("author");
32         authorTwo.setText("jim");
33         OutputFormat outputFormat = OutputFormat.createPrettyPrint();
34         try{
35             FileOutputStream out = new FileOutputStream(new File("src\\xmls\\DOM4J.xml"));
36             XMLWriter writer = new XMLWriter(out, outputFormat);
37             writer.write(document);
38             writer.close();
39         }catch (IOException e){
40             e.printStackTrace();
41         }
42     }
43 }

时间: 2024-10-10 01:11:06

生成XML文档的相关文章

dom4j解析和生成XML文档

解析XML的两种方法 package cnslp.dom4j.com; import java.io.File; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /**  * Created by cnslp on 2017/5/12 0012.  * 解析XML文档的

(九)生成XML文档流程

一:DOM方法生成XML 步骤: 1:创建DocumentBuilder:DocumentBuilder builder=new DocumentBuilder(); 2:创建dom对象:Document dom=builder.newDocument(); 3:创建dom中元素:Element element=dom.createElement("元素名"); 4:向元素添加子节点:element.appendChild(childElement);(dom树就是通过不停append

ASP.NET 动态查找数据 并且生成xml文档 同时使用xslt转换为xhtml

前言 xsl是一门标签解析语言,很适合做动态网页的前台标签 www.bamn.cn 1 首先是aspx页面 添加一个输入框 按钮 还有一个用来显示解析后的xhtml代码的控件 <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"

通过 JDOM 方式生成 XML 文档

1.引入jdom jar包 2.代码 Element ele = new Element("tree"); ele.setAttribute("id","0"); Document document = new Document(ele); Element e1 = new Element("name"); e1.setText("名称"); ele.addContent(e1); // Format fo

WebService生成XML文档时出错。不应是类型XXXX。使用XmlInclude或SoapInclude属性静态指定非已知的类型。

情况是SingleRoom和DoubleRoom是Room类的子类.在WebService中有一个方法是返回Room类. public Room Get(int roomId) { return Room.Get(roomId); } XmlSerializer在序列化时只能识别父类,而不能识别子类,所以导致序列化的错误.需要将[XmlInclude(typeof(SingleRoom))]和[XmlInclude(typeof(DoubleRoom))]同时加到WebService中. [Xm

使用GDataXML生成、修改XML文档-陈棚

使用GDXML生成XML文档的步骤如下. 1.调用GDataXMLNode的elementWithName:方法创建GDataXMLElement对象,对象作为XML文档的根元素. 2.调用GDataXMLNode的elementWithName:方法不断创建GDataXMLElement对象(XML元素),并利用元素之间的父子关系组织这些XML元素. 3.调用GDataXMLDocument的initWithRootElement:方法根据指定根元素来生成GDataXMLDocument对象-

.net 提取注释生成API文档 帮助文档

提取注释生成API文档 一.前言 在多人协作的项目中,除了良好的代码规范外,完整的API文档也相当重要.通过文档我们快速了解系统各模块的实际接口,及其使用场景.使用示例,一定程度上降低沟通成本,和减少后期维护中知识遗失等风险. 对于.Net,我们可以直接将类.方法等的注释直接转为API文档,极大地减少文档维护的工作量,同时也能反向提高大家的注释质量. 下面我们使用.Net唯一的注释生成API文档工具——Sandcastle和Sandcastle Help File Builder来实现API文档

.Net魔法堂:提取注释生成API文档

一.前言 在多人协作的项目中,除了良好的代码规范外,完整的API文档也相当重要.通过文档我们快速了解系统各模块的实际接口,及其使用场景.使用示例,一定程度上降低沟通成本,和减少后期维护中知识遗失等风险. 对于.Net,我们可以直接将类.方法等的注释直接转为API文档,极大地减少文档维护的工作量,同时也能反向提高大家的注释质量. 下面我们使用.Net唯一的注释生成API文档工具——Sandcastle和Sandcastle Help File Builder来实现API文档自动化吧! 二.工具 S

dom4j 解析 XML文档截录

dom4j 是一种解析 XML 文档的开放源代码 XML 框架.本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档. dom4j API 包含一个解析 XML 文档的工具.本文中将使用这个解析器创建一个示例 XML 文档.清单 1 显示了这个示例 XML 文档,catalog.xml. 清单 1. 示例 XML 文档(catalog.xml) <?xml version="1.0" encoding="UTF-8"?> <cat