java基础---->java自带的xml解析
在查看公司框架的源码的时候,发现框架用的是jdk自带的xml解析。今天,想着对它总结一下。从未放弃过爱你,只是从浓烈变得悄无声气。
利用jdk自带的xml创建文档
一、 CreateXmlFile类如下:
- package com.huhx.saxxml;
- import java.io.FileOutputStream;
- import java.io.PrintWriter;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.transform.OutputKeys;
- import javax.xml.transform.Transformer;
- import javax.xml.transform.TransformerFactory;
- import javax.xml.transform.dom.DOMSource;
- import javax.xml.transform.stream.StreamResult;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- public class CreateXmlFile {
- public static void parseXml(String path) {
- DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
- try {
- DocumentBuilder dombuilder = builderFactory.newDocumentBuilder();
- Document document = dombuilder.newDocument();
- Element root = document.createElement("persons");
- document.appendChild(root);
- // 第一个人
- Element person1 = document.createElement("person");
- person1.setAttribute("name", "Linux");
- root.appendChild(person1);
- Element sex = document.createElement("sex");
- sex.appendChild(document.createTextNode("女"));
- person1.appendChild(sex);
- Element address = document.createElement("address");
- address.appendChild(document.createTextNode("湖北"));
- person1.appendChild(address);
- Element phoneNumber = document.createElement("phone");
- phoneNumber.appendChild(document.createTextNode("155124578**"));
- person1.appendChild(phoneNumber);
- // 第二个人
- Element person2 = document.createElement("person");
- person2.setAttribute("name", "Huhx");
- root.appendChild(person2);
- Element sex2 = document.createElement("sex");
- sex2.appendChild(document.createTextNode("男"));
- person2.appendChild(sex2);
- Element address2 = document.createElement("address");
- address2.appendChild(document.createTextNode("湖南"));
- person2.appendChild(address2);
- Element phoneNumber2 = document.createElement("phone");
- phoneNumber2.appendChild(document.createTextNode("155124578**"));
- person2.appendChild(phoneNumber2);
- // 将上述的document写入到文件中
- TransformerFactory tf = TransformerFactory.newInstance();
- Transformer transformer = tf.newTransformer();
- DOMSource source = new DOMSource(document);
- transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
- transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- PrintWriter pw = new PrintWriter(new FileOutputStream(path));
- StreamResult result = new StreamResult(pw);
- transformer.transform(source, result);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- parseXml("text.xml");
- }
- }
二、 生成的text.xml文件如下:
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
- <persons>
- <person name="Linux">
- <sex>女</sex>
- <address>湖北</address>
- <phone>155124578**</phone>
- </person>
- <person name="Huhx">
- <sex>男</sex>
- <address>湖南</address>
- <phone>155124578**</phone>
- </person>
- </persons>
利用jdk自带的xml解析文档
一、 ReadXmlFile.java类的内容如下:
- package com.huhx.saxxml;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.NodeList;
- public class ReadXmlFile {
- public static void readXml(String path) {
- try {
- DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = builderFactory.newDocumentBuilder();
- Document document = builder.parse(path);
- Element rootElement = document.getDocumentElement();
- System.out.println("根元素:" + rootElement.getNodeName());
- NodeList childNodes = rootElement.getElementsByTagName("person");
- for (int i = 0; i < childNodes.getLength(); i++) {
- Element element = (Element) childNodes.item(i);
- String name = element.getAttribute("name");
- String content = element.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue();
- String address = element.getElementsByTagName("address").item(0).getFirstChild().getNodeValue();
- String phone = element.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue();
- System.out.println("name: " + name + ", content: " + content + ", address: " + address + ", phone: " + phone);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- readXml("text.xml");
- }
- }
二、控制台打印结果如下:
- 根元素:persons
- name: Linux, content: 女, address: 湖北, phone: 155124578**
- name: Huhx, content: 男, address: 湖南, phone: 155124578**
友情链接
java基础---->java自带的xml解析的更多相关文章
- 使用java自带的xml解析器解析xml
使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的ha ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.
- Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)
Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...
- Java基础-Java中的并法库之线程池技术
Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.
- Java基础-Java中23种设计模式之常用的设计模式
Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...
- Java基础-JAVA中常见的数据结构介绍
Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...
- Java基础-Java数据类型
Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...
随机推荐
- Android 使用Post方式提交数据
在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...
- CTC loss 理解
参考文献 CTC学习笔记(一) 简介:https://blog.csdn.net/xmdxcsj/article/details/51763868 CTC学习笔记(二) 训练和公式推导 很详细的公示推 ...
- 百度MIP(百度版的google AMP)了解一下?
官网:https://www.mipengine.org/ 视频教学:http://bit.baidu.com/subject/datalist/sid/10/cid/22.html github:h ...
- Locust分布式负载测试工具入门
忽略元数据末尾 回到原数据开始处 Locust简介 Locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试. 以下是github上的仓库地址 https://github.co ...
- Python根据系统环境配置日志,Python配置日志 Python logger
我们通常在写爬虫的时候,需要配置日志,但是有可能是在windows开发的,但是程序的运行环境可是是在Linux中,这时候我们就需要不停的更换日志的目录了 但是我们可以实现通过判断不同的运行环境,来时间 ...
- c语言中各种数据类型的长度
在32位平台和64位平台上,同一种数据类型可能有不同的数据长度: 类型 32位平台 64位平台 char 1 1 short 2 2 int 4 4 long 4 8 long long 8 8 fl ...
- 安卓开发学习2-官方例子Accelerometer
1.使用WakeLock防止屏幕被锁住,如果用户自己锁住屏幕,下次再开的时候还会重置一下,防止被锁. 2.SimulationView接收传感器事件,并且绘制.它实现SensorEventListen ...
- atitit.产品console 日志的aticonsole 方案处理总结
atitit.产品console 日志的aticonsole 方案处理总结 1. 主要原理流程 1 2. 调用代码 1 3. 内部主要实现 1 3.1. 放入消息 1 3.2. 读取消息 2 默认可以 ...
- jquery 给表格tbody t 加事件
jquery给所有td加事件 $('#erji_list_table').on('click','td', function(){ $('#yuan_content').slideToggle(&qu ...
- 访问子节点childNodes
访问子节点childNodes 访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性. 语法: elementNode.childNodes 注意: 如果选定的节点 ...