在查看公司框架的源码的时候,发现框架用的是jdk自带的xml解析。今天,想着对它总结一下。从未放弃过爱你,只是从浓烈变得悄无声气。

利用jdk自带的xml创建文档

一、 CreateXmlFile类如下:

  1. package com.huhx.saxxml;
  2.  
  3. import java.io.FileOutputStream;
  4. import java.io.PrintWriter;
  5.  
  6. import javax.xml.parsers.DocumentBuilder;
  7. import javax.xml.parsers.DocumentBuilderFactory;
  8. import javax.xml.transform.OutputKeys;
  9. import javax.xml.transform.Transformer;
  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.  
  17. public class CreateXmlFile {
  18.  
  19. public static void parseXml(String path) {
  20. DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  21. try {
  22. DocumentBuilder dombuilder = builderFactory.newDocumentBuilder();
  23. Document document = dombuilder.newDocument();
  24. Element root = document.createElement("persons");
  25. document.appendChild(root);
  26.  
  27. // 第一个人
  28. Element person1 = document.createElement("person");
  29. person1.setAttribute("name", "Linux");
  30. root.appendChild(person1);
  31.  
  32. Element sex = document.createElement("sex");
  33. sex.appendChild(document.createTextNode("女"));
  34. person1.appendChild(sex);
  35.  
  36. Element address = document.createElement("address");
  37. address.appendChild(document.createTextNode("湖北"));
  38. person1.appendChild(address);
  39.  
  40. Element phoneNumber = document.createElement("phone");
  41. phoneNumber.appendChild(document.createTextNode("155124578**"));
  42. person1.appendChild(phoneNumber);
  43.  
  44. // 第二个人
  45. Element person2 = document.createElement("person");
  46. person2.setAttribute("name", "Huhx");
  47. root.appendChild(person2);
  48.  
  49. Element sex2 = document.createElement("sex");
  50. sex2.appendChild(document.createTextNode("男"));
  51. person2.appendChild(sex2);
  52.  
  53. Element address2 = document.createElement("address");
  54. address2.appendChild(document.createTextNode("湖南"));
  55. person2.appendChild(address2);
  56.  
  57. Element phoneNumber2 = document.createElement("phone");
  58. phoneNumber2.appendChild(document.createTextNode("155124578**"));
  59. person2.appendChild(phoneNumber2);
  60.  
  61. // 将上述的document写入到文件中
  62. TransformerFactory tf = TransformerFactory.newInstance();
  63. Transformer transformer = tf.newTransformer();
  64. DOMSource source = new DOMSource(document);
  65. transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
  66. transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
  67. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  68. PrintWriter pw = new PrintWriter(new FileOutputStream(path));
  69. StreamResult result = new StreamResult(pw);
  70. transformer.transform(source, result);
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. }
  74. }
  75.  
  76. public static void main(String[] args) {
  77. parseXml("text.xml");
  78. }
  79. }

二、 生成的text.xml文件如下:

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <persons>
  3. <person name="Linux">
  4. <sex></sex>
  5. <address>湖北</address>
  6. <phone>155124578**</phone>
  7. </person>
  8. <person name="Huhx">
  9. <sex></sex>
  10. <address>湖南</address>
  11. <phone>155124578**</phone>
  12. </person>
  13. </persons>

利用jdk自带的xml解析文档

一、 ReadXmlFile.java类的内容如下:

  1. package com.huhx.saxxml;
  2.  
  3. import javax.xml.parsers.DocumentBuilder;
  4. import javax.xml.parsers.DocumentBuilderFactory;
  5.  
  6. import org.w3c.dom.Document;
  7. import org.w3c.dom.Element;
  8. import org.w3c.dom.NodeList;
  9.  
  10. public class ReadXmlFile {
  11. public static void readXml(String path) {
  12. try {
  13. DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  14. DocumentBuilder builder = builderFactory.newDocumentBuilder();
  15.  
  16. Document document = builder.parse(path);
  17. Element rootElement = document.getDocumentElement();
  18. System.out.println("根元素:" + rootElement.getNodeName());
  19.  
  20. NodeList childNodes = rootElement.getElementsByTagName("person");
  21. for (int i = 0; i < childNodes.getLength(); i++) {
  22. Element element = (Element) childNodes.item(i);
  23. String name = element.getAttribute("name");
  24. String content = element.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue();
  25. String address = element.getElementsByTagName("address").item(0).getFirstChild().getNodeValue();
  26. String phone = element.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue();
  27. System.out.println("name: " + name + ", content: " + content + ", address: " + address + ", phone: " + phone);
  28. }
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. }
  33.  
  34. public static void main(String[] args) {
  35. readXml("text.xml");
  36. }
  37. }

二、控制台打印结果如下:

  1. 根元素:persons
  2. name: Linux, content: 女, address: 湖北, phone: 155124578**
  3. name: Huhx, content: 男, address: 湖南, phone: 155124578**

友情链接

java基础---->java自带的xml解析的更多相关文章

  1. 使用java自带的xml解析器解析xml

    使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的ha ...

  2. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  3. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  4. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  5. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  6. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

  7. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  8. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  9. Java基础-Java数据类型

    Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...

随机推荐

  1. Android 使用Post方式提交数据

    在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...

  2. CTC loss 理解

    参考文献 CTC学习笔记(一) 简介:https://blog.csdn.net/xmdxcsj/article/details/51763868 CTC学习笔记(二) 训练和公式推导 很详细的公示推 ...

  3. 百度MIP(百度版的google AMP)了解一下?

    官网:https://www.mipengine.org/ 视频教学:http://bit.baidu.com/subject/datalist/sid/10/cid/22.html github:h ...

  4. Locust分布式负载测试工具入门

    忽略元数据末尾 回到原数据开始处 Locust简介 Locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试. 以下是github上的仓库地址 https://github.co ...

  5. Python根据系统环境配置日志,Python配置日志 Python logger

    我们通常在写爬虫的时候,需要配置日志,但是有可能是在windows开发的,但是程序的运行环境可是是在Linux中,这时候我们就需要不停的更换日志的目录了 但是我们可以实现通过判断不同的运行环境,来时间 ...

  6. c语言中各种数据类型的长度

    在32位平台和64位平台上,同一种数据类型可能有不同的数据长度: 类型 32位平台 64位平台 char 1 1 short 2 2 int 4 4 long 4 8 long long 8 8 fl ...

  7. 安卓开发学习2-官方例子Accelerometer

    1.使用WakeLock防止屏幕被锁住,如果用户自己锁住屏幕,下次再开的时候还会重置一下,防止被锁. 2.SimulationView接收传感器事件,并且绘制.它实现SensorEventListen ...

  8. atitit.产品console 日志的aticonsole 方案处理总结

    atitit.产品console 日志的aticonsole 方案处理总结 1. 主要原理流程 1 2. 调用代码 1 3. 内部主要实现 1 3.1. 放入消息 1 3.2. 读取消息 2 默认可以 ...

  9. jquery 给表格tbody t 加事件

    jquery给所有td加事件 $('#erji_list_table').on('click','td', function(){ $('#yuan_content').slideToggle(&qu ...

  10. 访问子节点childNodes

    访问子节点childNodes 访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性. 语法: elementNode.childNodes 注意: 如果选定的节点 ...