xml的解析一

前端之家收集整理的这篇文章主要介绍了xml的解析一前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

jaxp是javase的一部分

jaxp解析器在jdk的javax.xml.parsers包里面

四个类:分别是针对dom和sax解析使用的类

dom:

DocumentBuilder : 解析器类

这个类是一个抽象类,不能new,此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取

一个方法,可以解析xml parse("xml路径") 返回是 Document 整个文档

返回的document是一个接口,父节点是Node,如果在document里面找不到想要的方法,到Node里面去找

在document里面方法

  • getElementsByTagName(String tagname),这个方法可以得到标签,返回集合 NodeList
  • createElement(String tagName),创建标签
  • createTextNode(String data) ,创建文本
  • appendChild(Node newChild),把文本添加标签下面
  • removeChild(Node oldChild),删除节点
  • getParentNode() ,获取父节点
  • NodeList list getLength() 得到集合的长度 item(int index)下标取到具体的值
  • getTextContent(),得到标签里面的内容
DocumentBuilderFactory: 解析器工厂,这个类也是一个抽象类,不能new,newInstance() 获取 DocumentBuilderFactory 的实例。
案例:
  1. <?xml version="1.0" encoding="utf-8" standalone="no"?>
  2. <person>
  3. <p1>
  4. <name>张三</name>
  5. <age>20</age>
  6. </p1>
  7. <p1>
  8. <name>李四</name>
  9. <age>30</age>
  10. </p1>
  11. </person>
  1. package com.java.xml;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.xml.parsers.DocumentBuilder;
  6. import javax.xml.parsers.DocumentBuilderFactory;
  7. import javax.xml.parsers.ParserConfigurationException;
  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.  
  14. import org.w3c.dom.Document;
  15. import org.w3c.dom.Element;
  16. import org.w3c.dom.Node;
  17. import org.w3c.dom.NodeList;
  18. import org.w3c.dom.Text;
  19. import org.xml.sax.SAXException;
  20.  
  21. public class TestJaxp {
  22.  
  23. public static void main(String[] args)
  24. throws ParserConfigurationException,SAXException,IOException,TransformerException {
  25. // selectAll();
  26. // selectSingle();
  27. // addSex();
  28. // modifySex();
  29. // deleteSex();
  30. listElements();
  31. }
  32. /**
  33. * 查询所有name元素的值
  34. * @throws ParserConfigurationException
  35. * @throws IOException
  36. * @throws SAXException
  37. */
  38. public static void selectAll() throws ParserConfigurationException,IOException {
  39. /*
  40. * 1.创建解析器工厂
  41. * 2.根据解析器工厂创建解析器
  42. * 3.解析xml返回document
  43. * 4.得到所有的name元素
  44. * 5.返回集合,遍历集合
  45. */
  46. //创建解析器工厂
  47. DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  48. //创建解析器
  49. DocumentBuilder builder = builderFactory.newDocumentBuilder();
  50. //解析xml返回document
  51. Document document = builder.parse("src/person.xml");
  52. //得到name元素
  53. NodeList list = document.getElementsByTagName("name");
  54. //遍历集合
  55. for (int i = 0; i < list.getLength(); i++) {
  56. //得到每一个name元素
  57. Node name1 = list.item(i);
  58. String s = name1.getTextContent();
  59. System.out.println(s);
  60. }
  61. }
  62. /**
  63. * 查询xml第一个name元素的值
  64. * @throws ParserConfigurationException
  65. * @throws IOException
  66. * @throws SAXException
  67. */
  68. public static void selectSingle() throws ParserConfigurationException,IOException {
  69. /**
  70. * 1.创建解析器工厂
  71. * 2.根据解析器工厂创建解析器
  72. * 3.解析xml返回document
  73. * 4.得到所有的name元素
  74. * 5.使用返回集合里面的方法item,根据下标获取具体的元素
  75. * 6.得到具体的值,使用getTextContent()方法
  76. */
  77. //创建解析器工厂
  78. DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  79. //创建解析器
  80. DocumentBuilder builder = builderFactory.newDocumentBuilder();
  81. //解析xml得到document
  82. Document document = builder.parse("src/person.xml");
  83. //得到所有的name元素
  84. NodeList list = document.getElementsByTagName("name");
  85. //使用下标得到第一个name元素
  86. Node name1 = list.item(0);
  87. //取得name元素的值
  88. String s = name1.getTextContent();
  89. System.out.println(s);
  90. }
  91. /**
  92. * 在第一个p1下面添加<sex>nv</sex>
  93. * @throws ParserConfigurationException
  94. * @throws IOException
  95. * @throws SAXException
  96. * @throws TransformerException
  97. */
  98. public static void addSex() throws ParserConfigurationException,TransformerException {
  99. /*
  100. * 1.创建解析器工厂
  101. * 2.根据解析器工厂创建解析器
  102. * 3.解析xml得到document
  103. * 4.得到第一个p1,得到所有的p1使用item方法下标得到
  104. * 5.创建sex标签,createElement
  105. * 6.创建文本 createTextNode
  106. * 7.把文本添加到sex下面 appendChild
  107. * 8.把sex添加到第一个p1下面
  108. * 9.回写xml
  109. */
  110. //创建解析器工厂
  111. DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  112. //创建解析器
  113. DocumentBuilder builder = builderFactory.newDocumentBuilder();
  114. //解析xml得到document
  115. Document document = builder.parse("src/person.xml");
  116. //得到所有的p1
  117. NodeList list = document.getElementsByTagName("p1");
  118. //得到第一个p1
  119. Node p1 = list.item(0);
  120. //创建标签
  121. Element sex = document.createElement("sex");
  122. //创建文本
  123. Text text = document.createTextNode("nv");
  124. //把文本添加到sex下
  125. sex.appendChild(text);
  126. //把sex添加到p1下
  127. p1.appendChild(sex);
  128. //回写xml
  129. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  130. Transformer transformer = transformerFactory.newTransformer();
  131. transformer.transform(new DOMSource(document),new StreamResult("src/person.xml"));
  132. }
  133. /**
  134. * 修改第一个p1下面的sex内容是nan
  135. * @throws ParserConfigurationException
  136. * @throws IOException
  137. * @throws SAXException
  138. * @throws TransformerException
  139. */
  140. public static void modifySex() throws ParserConfigurationException,TransformerException {
  141. /*
  142. * 1.创建解析器工厂
  143. * 2.创建解析器
  144. * 3.解析xml得到document
  145. * 4.得到sex,使用item方法
  146. * 5.修改sex中的值,使用setTextContent方法
  147. * 6.回写xml
  148. */
  149. //创建解析器工厂
  150. DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  151. //创建解析器
  152. DocumentBuilder builder = builderFactory.newDocumentBuilder();
  153. //解析xml得到document
  154. Document document = builder.parse("src/person.xml");
  155. //得到sex
  156. Node sex = document.getElementsByTagName("sex").item(0);
  157. //修改sex中的值
  158. sex.setTextContent("男");
  159. //回写xml
  160. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  161. Transformer transformer = transformerFactory.newTransformer();
  162. transformer.transform(new DOMSource(document),new StreamResult("src/person.xml"));
  163. }
  164. /**
  165. * 删除<sex></sex>节点
  166. * @throws ParserConfigurationException
  167. * @throws IOException
  168. * @throws SAXException
  169. * @throws TransformerException
  170. */
  171. public static void deleteSex() throws ParserConfigurationException,TransformerException {
  172. /*
  173. * 1.创建解析器工厂
  174. * 2.根据解析器工厂创建解析器
  175. * 3.解析xml得到document
  176. * 4.获取sex元素
  177. * 5.获取sex的父节点
  178. * 6.删除使用父节点的removeChild方法
  179. * 7.回写xml
  180. */
  181. //创建解析器工厂
  182. DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  183. //创建解析器
  184. DocumentBuilder builder = builderFactory.newDocumentBuilder();
  185. //解析xml得到document
  186. Document document = builder.parse("src/person.xml");
  187. //获取sex元素
  188. Node sex = document.getElementsByTagName("sex").item(0);
  189. //得到sex的父节点
  190. Node p1 = sex.getParentNode();
  191. //删除操作
  192. p1.removeChild(sex);
  193. //回写xml
  194. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  195. Transformer transformer = transformerFactory.newTransformer();
  196. transformer.transform(new DOMSource(document),new StreamResult("src/person.xml"));
  197. }
  198. /**
  199. * 遍历节点,把所有元素名称打印出来
  200. * @throws ParserConfigurationException
  201. * @throws IOException
  202. * @throws SAXException
  203. */
  204. public static void listElements() throws ParserConfigurationException,IOException {
  205. /*
  206. * 1.创建解析器工厂
  207. * 2.根据解析器工厂创建解析器
  208. * 3.解析xml得到document
  209. * ======使用递归=======
  210. * 4.得到根节点
  211. * 5.得到根节点子节点
  212. * 6.得到根节点子节点的子节点
  213. */
  214. //创建解析器工厂
  215. DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  216. //创建解析器
  217. DocumentBuilder builder = builderFactory.newDocumentBuilder();
  218. //解析xml得到document
  219. Document document = builder.parse("src/person.xml");
  220. //编写一个方法实现遍历操作
  221. list(document);
  222. }
  223. /**
  224. * 递归遍历的方法
  225. * @param document
  226. */
  227. public static void list(Node node) {
  228. //判断是元素类型才打印
  229. if(node.getNodeType() == Node.ELEMENT_NODE) {
  230. System.out.println(node.getNodeName());
  231. }
  232. //得到一层子节点
  233. NodeList list = node.getChildNodes();
  234. //遍历list
  235. for (int i = 0; i < list.getLength(); i++) {
  236. //得到每一个节点
  237. Node node1 = list.item(i);
  238. //继续得到node1的子节点
  239. list(node1);
  240. }
  241. }
  242. }

猜你在找的XML相关文章