ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java Document生成和解析XML(DOMHelper.createDocument()方法过期了)

2020-11-26 21:03:29  阅读:146  来源: 互联网

标签:XML xml Java createDocument doc import Document 节点


参考:https://blog.csdn.net/p812438109/article/details/81807440

1、Document介绍。

  答:API来源:在JDK中javax.xml.*包下。

2、Document使用场景:

  1)、需要知道XML文档所有结构。
  2)、需要把文档一些元素排序。
  3)、文档中的信息被多次使用的情况。

 

3、Document的优势和缺点:

  1)、优势:由于Document是java中自带的解析器,兼容性强。
  2)、缺点:由于Document是一次性加载文档信息,如果文档太大,加载耗时长,不太适用。

 

4、Document生成XML,步骤如下所示:

  1 package com.demo.utils;
  2 
  3 import java.io.File;
  4 
  5 import javax.xml.parsers.DocumentBuilder;
  6 import javax.xml.parsers.DocumentBuilderFactory;
  7 import javax.xml.parsers.ParserConfigurationException;
  8 import javax.xml.transform.OutputKeys;
  9 import javax.xml.transform.Transformer;
 10 import javax.xml.transform.TransformerConfigurationException;
 11 import javax.xml.transform.TransformerException;
 12 import javax.xml.transform.TransformerFactory;
 13 import javax.xml.transform.dom.DOMSource;
 14 import javax.xml.transform.stream.StreamResult;
 15 
 16 import org.w3c.dom.Document;
 17 import org.w3c.dom.Element;
 18 
 19 /**
 20  * Document生成XML
 21  * 
 22  * @author
 23  *
 24  */
 25 public class CreateDocument {
 26 
 27     public static void main(String[] args) {
 28         // 执行Document生成XML方法
 29         createDocument(new File("E:\\person.xml"));
 30     }
 31 
 32     public static void createDocument(File file) {
 33         try {
 34             // 第一步:初始化一个XML解析工厂。
 35             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 36 
 37             // 第二步:创建一个DocumentBuilder实例。
 38             DocumentBuilder builder = factory.newDocumentBuilder();
 39 
 40             // 第三步:构建一个Document实例。
 41             Document doc = builder.newDocument();
 42             // standalone用来表示该文件是否呼叫其它外部的文件。若值是 "yes"表示没有呼叫外部文件
 43             doc.setXmlStandalone(true);
 44 
 45             // 第四步:创建一个根节点,名称为root,并设置一些基本属性。
 46             // 创建一个根节点
 47             // 说明: doc.createElement("元素名")、
 48             // element.setAttribute("属性名","属性值")、设置节点属性
 49             // element.setTextContent("标签间的内容"),设置标签之间的内容
 50             Element element = doc.createElement("root");
 51             element.setAttribute("attr", "root");
 52 
 53             // 创建根节点第一个子节点
 54             Element elementChildOne = doc.createElement("userInfo");
 55             elementChildOne.setAttribute("attr", "userInfo1");
 56             element.appendChild(elementChildOne);
 57 
 58             // 第一个子节点的第一个子节点
 59             Element childOneOne = doc.createElement("zhangsansan");
 60             childOneOne.setAttribute("attr", "userInfo1");
 61             childOneOne.setTextContent("attr zhangsansan");
 62             elementChildOne.appendChild(childOneOne);
 63 
 64             // 第一个子节点的第二个子节点
 65             Element childOneTwo = doc.createElement("lisisi");
 66             childOneTwo.setAttribute("attr", "userInfo1");
 67             childOneTwo.setTextContent("attr lisisi");
 68             elementChildOne.appendChild(childOneTwo);
 69 
 70             // 创建根节点第二个子节点
 71             Element elementChildTwo = doc.createElement("userInfo");
 72             elementChildTwo.setAttribute("attr", "userInfo2");
 73             element.appendChild(elementChildTwo);
 74 
 75             // 第二个子节点的第一个子节点
 76             Element childTwoOne = doc.createElement("lisisi");
 77             childTwoOne.setAttribute("attr", "userInfo2");
 78             childTwoOne.setTextContent("attr lisisi");
 79             elementChildTwo.appendChild(childTwoOne);
 80 
 81             // 第二个子节点的第二个子节点
 82             Element childTwoTwo = doc.createElement("wangwuwu");
 83             childTwoTwo.setAttribute("attr", "userInfo2");
 84             childTwoTwo.setTextContent("attr wangwuwu");
 85             elementChildTwo.appendChild(childTwoTwo);
 86 
 87             // 第五步:把节点添加到Document中,再创建一些子节点加入,添加根节点
 88             doc.appendChild(element);
 89 
 90             // 第六步:把构造的XML结构,写入到具体的文件中
 91             // 把构造的XML结构,写入到具体的文件中
 92             TransformerFactory formerFactory = TransformerFactory.newInstance();
 93             Transformer transformer = formerFactory.newTransformer();
 94             // 换行
 95             transformer.setOutputProperty(OutputKeys.INDENT, "YES");
 96             // 文档字符编码
 97             transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
 98 
 99             // 可随意指定文件的后缀,效果一样,但xml比较好解析,比如: E:\\person.txt等
100             transformer.transform(new DOMSource(doc), new StreamResult(file));
101 
102             System.out.println("XML CreateDocument success!");
103         } catch (ParserConfigurationException e) {
104             e.printStackTrace();
105         } catch (TransformerConfigurationException e) {
106             e.printStackTrace();
107         } catch (TransformerException e) {
108             e.printStackTrace();
109         }
110     }
111 
112 }

演示效果,如果是实际业务,可能要结合具体的业务进行分析,随时这东西,不常用吧,但是遇到了还是得会处理这种业务和需求的,如下所示:

 

5、Document解析XML,步骤如下所示:

 1 package com.demo.utils;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 
 6 import javax.xml.parsers.DocumentBuilder;
 7 import javax.xml.parsers.DocumentBuilderFactory;
 8 import javax.xml.parsers.ParserConfigurationException;
 9 
10 import org.w3c.dom.Attr;
11 import org.w3c.dom.Document;
12 import org.w3c.dom.Element;
13 import org.w3c.dom.NamedNodeMap;
14 import org.w3c.dom.Node;
15 import org.w3c.dom.NodeList;
16 import org.xml.sax.SAXException;
17 
18 /**
19  * 
20  * @author Document解析XML
21  *
22  */
23 public class ParseDocument {
24 
25     public static void main(String[] args) {
26         File file = new File("E:\\person.xml");
27         if (!file.exists()) {
28             System.out.println("xml文件不存在,请确认!");
29         } else {
30             // 第一步:先获取需要解析的文件,判断文件是否已经存在或有效
31             parseDocument(file);
32         }
33     }
34 
35     public static void parseDocument(File file) {
36         try {
37             // 第二步:初始化一个XML解析工厂
38             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
39 
40             // 第三步:创建一个DocumentBuilder实例
41             DocumentBuilder builder = factory.newDocumentBuilder();
42 
43             // 第四步:创建一个解析XML的Document实例
44             Document doc = builder.parse(file);
45 
46             // 第五步:先获取根节点的信息,然后根据根节点递归一层层解析XML
47             // 获取根节点名称
48             String rootName = doc.getDocumentElement().getTagName();
49             System.out.println("根节点: " + rootName);
50 
51             System.out.println("递归解析--------------begin------------------");
52             // 递归解析Element
53             Element element = doc.getDocumentElement();
54             parseElement(element);
55             System.out.println("递归解析--------------end------------------");
56         } catch (ParserConfigurationException e) {
57             e.printStackTrace();
58         } catch (SAXException e) {
59             e.printStackTrace();
60         } catch (IOException e) {
61             e.printStackTrace();
62         }
63     }
64 
65     // 递归方法
66     public static void parseElement(Element element) {
67         System.out.print("<" + element.getTagName());
68         NamedNodeMap attris = element.getAttributes();
69         for (int i = 0; i < attris.getLength(); i++) {
70             Attr attr = (Attr) attris.item(i);
71             System.out.print(" " + attr.getName() + "=\"" + attr.getValue() + "\"");
72         }
73         System.out.println(">");
74 
75         NodeList nodeList = element.getChildNodes();
76         Node childNode;
77         for (int temp = 0; temp < nodeList.getLength(); temp++) {
78             childNode = nodeList.item(temp);
79 
80             // 判断是否属于节点
81             if (childNode.getNodeType() == Node.ELEMENT_NODE) {
82                 // 判断是否还有子节点
83                 if (childNode.hasChildNodes()) {
84                     parseElement((Element) childNode);
85                 } else if (childNode.getNodeType() != Node.COMMENT_NODE) {
86                     System.out.print(childNode.getTextContent());
87                 }
88             }
89         }
90         System.out.println("</" + element.getTagName() + ">");
91     }
92 
93 }

解析效果,如下所示:

 1 根节点: root
 2 递归解析--------------begin------------------
 3 <root attr="root">
 4 <userInfo attr="userInfo1">
 5 <zhangsansan attr="userInfo1">
 6 </zhangsansan>
 7 <lisisi attr="userInfo1">
 8 </lisisi>
 9 </userInfo>
10 <userInfo attr="userInfo2">
11 <lisisi attr="userInfo2">
12 </lisisi>
13 <wangwuwu attr="userInfo2">
14 </wangwuwu>
15 </userInfo>
16 </root>
17 递归解析--------------end------------------

 

标签:XML,xml,Java,createDocument,doc,import,Document,节点
来源: https://www.cnblogs.com/biehongli/p/14043925.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有