3.1XML解析

前端之家收集整理的这篇文章主要介绍了3.1XML解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
(xml的增删改查)
1:XML的使用范围
2:XML的声明
文档类型定义:(用于验证XML文件中的元素类型是否合法)
DTD:
XSD:Xml Schema
3:XML的组成
XML中也是由节点来组成。
根节点 Root节点
元素节点 Element节点
属性节点 Attribute节点
文本节点 Text节点
注释节点 Comment节点
CDATA节点。
文档节点: document节点
4:特殊字符
HTML 空格。  
& &
XML
A:转义字符。与HTML中的转义字符一样。
B:CDATA节点。

5:XML的解析:
服务端解析
JDK:
DOM
SAX
JAXB java and xml Binding
开源
JDOM
DOM4J:hibernate框架就是使用dom4j来解析映射文件
X-Stream:java跟XML之间转换的工具(java转成xml文件/字符串,
xml文件/字符串转为java对象)
DOM/SAX/JDom/Dom4J之间的区别:
DOM/JDom:将XML文件中的内容一次性的读取到内存中。读取数据量比较少的数据有优势。
SAX: 基于事件的驱动。读取数据量比较大的XML文件

解析XML的步骤:
A:获取解析器
B:解析XML文件
C:获取Document文档对象
D:获取根节点
E:通过根节点来操作底下的子节点。
DOM4J
Reader
DomReader
SaxReader
CDATA节点的修改
删除添加
6、

Dom4J的使用:

1、导入dom4j的jar包:dom4j-1.6.1.jar

2.、具体使用

1)获得解析器:

SAXReader reader=new SAXReader();

2)解析器解析文件,获得文档对象

Document doc=reader.read(new File("src/book.xml"));

3)获得要元素:

Element root=doc.getRootElement();

--Element中的方法

getName():获得标签名。

getText()获得标签之间的内容

elementText("标签名"):根据标签名获得孩子节点的内容

attributeValue("属性名"):根据属性名获得属性值。

attributeIterator()获得该元素下的属性迭代器。

elementIterator()获得子元素迭代器。

--Attribute中的方法

getName():获得属性名。

getValue():获得属性值。

3.写xml文件保存到本地:

1.创建文档对象:

Document doc=DocumentHelper.createDocument();

2.在文档对象中创建根元素

Element root=doc.addElement("标签名");

3.往根中增加元素

Element book=root.addElement("boot");

4.设置标签中的文本

book.setText("thinking in java");

5.设置标签属性属性

boot.addAttribute("id","123");

6.文档对象写入文件

FileWriter filewriter=new FileWriter(new File("src/mybook.xml"));

4.设置格式:

OutputFormat xmlFormat=OutputFormat.createPrettyPrint();

xmlFormat.serEncoding("utf-8");

XMLWriter xmlWriter=new XMLWriter(fileWriter,xmlFormat);

写入文件

xmlWriter.write(doc);

关闭

xml.writer.close();

filewriter.close();

5.xml的修改:需要读取xml文件然后根据修改构建一份新的xml写入到本地覆盖原来的。

7、例子代码

  1. package com.test;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.OutputStream;
  6. import java.util.List;
  7.  
  8. import org.dom4j.Document;
  9. import org.dom4j.Element;
  10. import org.dom4j.io.OutputFormat;
  11. import org.dom4j.io.SAXReader;
  12. import org.dom4j.io.XMLWriter;
  13.  
  14. public class TestXML {
  15. public static void main(String[] args) {
  16. TestXML testXML = new TestXML();
  17. // testXML.readXML();
  18. // testXML.addXML();
  19. // testXML.deleteXML();
  20. testXML.updateXML();
  21. }
  22.  
  23. private void readXML() {
  24. /**
  25. * XML的解析的标准步骤
  26. *
  27. * 1:创建一个XML的解析器。
  28. *
  29. * 2:解析器解析XML文件,返回一个Document的元素节点。
  30. *
  31. * 3:通过Document来获取一个根节点的对象。
  32. *
  33. * 4:通过根节点来获取底下的子节点。
  34. */
  35. File xmlFile = new File(
  36. "D:\\WorkSpace6.5\\java1603\\Eclipse\\Xml_Project\\src\\student.xml");
  37. SAXReader saxReader = new SAXReader();
  38. try {
  39. Document document = saxReader.read(xmlFile);
  40. Element root = document.getRootElement();
  41. System.out.println(root.getName() + "\t" + root.getNodeTypeName());
  42. List<Element> childList = root.elements();
  43. System.out.println(childList.size());
  44.  
  45. childList = root.elements("student");
  46. System.out.println(childList.size());
  47.  
  48. for (Element stuElement : childList) {
  49. String stu_id = stuElement.attributeValue("id");
  50.  
  51. Element stu_nameElement = stuElement.element("stu_name");
  52. String stu_name = stu_nameElement.getText();
  53. String stu_age = stuElement.elementText("stu_age");
  54. String stu_sex = stuElement.elementText("stu_sex");
  55. String stu_content = stuElement.elementText("stu_content");
  56. System.out.println(stu_id + "\t" + stu_name + "\t" + stu_age
  57. + "\t" + stu_sex + "\t" + stu_content);
  58. }
  59. } catch (Exception e) {
  60. e.printStackTrace();
  61. }
  62. }
  63.  
  64. private void addXML() {
  65. File xmlFile = new File(
  66. "D:\\WorkSpace6.5\\java1603\\Eclipse\\Xml_Project\\src\\student.xml");
  67. SAXReader saxReader = new SAXReader();
  68.  
  69. try {
  70. Document document = saxReader.read(xmlFile);
  71. Element root = document.getRootElement();
  72. /**
  73. * 在root中添加一个student的元素节点
  74. */
  75.  
  76. // <student></student>
  77. Element student = root.addElement("student");
  78. // 在student元素添加属性节点
  79. // <student id = "4"></student>
  80. student.addAttribute("id","4");
  81.  
  82. /**
  83. * 在student元素下面加入stu_name节点
  84. */
  85. Element stu_name = student.addElement("stu_name");
  86. stu_name.setText("王五");
  87.  
  88. Element stu_age = student.addElement("stu_age");
  89. stu_age.setText("30");
  90.  
  91. Element stu_sex = student.addElement("stu_sex");
  92. stu_sex.setText("男");
  93.  
  94. Element stu_content = student.addElement("stu_content");
  95. stu_content.addCDATA("!@#$%^&*&^YHGKPPLKjhfd;afdsl;alsdf");
  96.  
  97. /**
  98. * 将内容重新写回到XML文件中。
  99. */
  100. OutputStream outputStream = new FileOutputStream(xmlFile);
  101.  
  102. OutputFormat outputFormat = OutputFormat.createPrettyPrint();
  103. outputFormat.setIndent(true);
  104. outputFormat.setIndent("\t");
  105.  
  106. XMLWriter xmlWriter = new XMLWriter(outputStream,outputFormat);
  107. xmlWriter.write(document);
  108. xmlWriter.flush();
  109. xmlWriter.close();
  110. } catch (Exception e) {
  111. e.printStackTrace();
  112. }
  113. }
  114.  
  115. /**
  116. * 删除XML中的元素
  117. */
  118. private void deleteXML() {
  119. File xmlFile = new File(
  120. "D:\\WorkSpace6.5\\java1603\\Eclipse\\Xml_Project\\src\\student.xml");
  121.  
  122. SAXReader saxReader = new SAXReader();
  123.  
  124. try {
  125. Document document = saxReader.read(xmlFile);
  126. Element root = document.getRootElement();
  127. List<Element> childList = root.elements("student");
  128.  
  129. for (Element stuElement : childList) {
  130. String stu_id = stuElement.attributeValue("id");
  131. if (stu_id.equals("5")) {
  132. root.remove(stuElement);
  133. break;
  134. }
  135. }
  136.  
  137. /**
  138. * 将内容重新写回到XML文件中。
  139. */
  140. OutputStream outputStream = new FileOutputStream(xmlFile);
  141.  
  142. OutputFormat outputFormat = OutputFormat.createPrettyPrint();
  143. outputFormat.setIndent(true);
  144. outputFormat.setIndent("\t");
  145.  
  146. XMLWriter xmlWriter = new XMLWriter(outputStream,outputFormat);
  147. xmlWriter.write(document);
  148. xmlWriter.flush();
  149. xmlWriter.close();
  150.  
  151. } catch (Exception e) {
  152. e.printStackTrace();
  153. }
  154. }
  155.  
  156. private void updateXML() {
  157. File xmlFile = new File(
  158. "D:\\WorkSpace6.5\\java1603\\Eclipse\\Xml_Project\\src\\student.xml");
  159.  
  160. SAXReader saxReader = new SAXReader();
  161.  
  162. try {
  163. Document document = saxReader.read(xmlFile);
  164. Element root = document.getRootElement();
  165. List<Element> childList = root.elements("student");
  166.  
  167. for (Element stuElement : childList) {
  168. String stu_id = stuElement.attributeValue("id");
  169. if (stu_id.equals("2")) {
  170. /**
  171. * 更改XML中元素节点的数据
  172. */
  173. Element stu_name = stuElement.element("stu_name");
  174. Element stu_age = stuElement.element("stu_age");
  175. Element stu_sex = stuElement.element("stu_sex");
  176. Element stu_content = stuElement.element("stu_content");
  177.  
  178. stu_name.setText("修改操作");
  179. stu_age.setText("20");
  180. stu_sex.setText("gril");
  181. /**
  182. * 由于Dom4j中没有提供CDATA节点修改的操作。
  183. *
  184. * 变通:先删除节点,然后再添加CDATA节点的操作
  185. */
  186. stuElement.remove(stu_content);
  187. stu_content = stuElement.addElement("stu_content");
  188. stu_content.addCDATA("CDATA节点被修改了.....l.asidfuaosdf");
  189. break;
  190. }
  191. }
  192.  
  193. /**
  194. * 将内容重新写回到XML文件中。
  195. */
  196. OutputStream outputStream = new FileOutputStream(xmlFile);
  197.  
  198. OutputFormat outputFormat = OutputFormat.createPrettyPrint();
  199. outputFormat.setIndent(true);
  200. outputFormat.setIndent("\t");
  201.  
  202. XMLWriter xmlWriter = new XMLWriter(outputStream,outputFormat);
  203. xmlWriter.write(document);
  204. xmlWriter.flush();
  205. xmlWriter.close();
  206.  
  207. } catch (Exception e) {
  208. e.printStackTrace();
  209. }
  210. }
  211.  
  212. }
8、student.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <root>
  4. <student id="1">
  5. <stu_name>aaa</stu_name>
  6. <stu_age>21</stu_age>
  7. <stu_sex></stu_sex>
  8. <stu_content>1+23</stu_content>
  9. </student>
  10. <student id="2">
  11. <stu_name>修改操作</stu_name>
  12. <stu_age>20</stu_age>
  13. <stu_sex>gril</stu_sex>
  14. <stu_content><![CDATA[CDATA节点被修改了.....l.asidfuaosdf]]></stu_content>
  15. </student>
  16. <teacher t_id="3" />
  17. <student id="4">
  18. <stu_name>admin</stu_name>
  19. <stu_age>10</stu_age>
  20. <stu_sex></stu_sex>
  21. <stu_content><![CDATA[!@#$%^&*&^YHGKPPLKjhfd;afdsl;alsdf]]></stu_content>
  22. </student>
  23. <student id="5">
  24. <stu_name>test</stu_name>
  25. <stu_age>20</stu_age>
  26. <stu_sex></stu_sex>
  27. <stu_content><![CDATA[!@#$%^&*&^YHGKPPLKjhfd;afdsl;alsdf]]></stu_content>
  28. </student>
  29. <student id="6">
  30. <stu_name>guest</stu_name>
  31. <stu_age>30</stu_age>
  32. <stu_sex></stu_sex>
  33. <stu_content><![CDATA[!@#$%^&*&^YHGKPPLKjhfd;afdsl;alsdf]]></stu_content>
  34. </student>
  35. </root>

猜你在找的XML相关文章