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数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...
随机推荐
- python --批量重命名文件名
# -*- coding: utf-8 -*- import os path = "d:\\curl\data\\" for file in os.listdir(path): p ...
- HDU 3667 Transportation(网络流之费用流)
题目地址:HDU 3667 这题的建图真是巧妙...为了保证流量正好达到k.须要让每一次增广到的流量都是1,这就须要把每一条边的流量都是1才行.可是每条边的流量并非1,该怎么办呢.这个时候能够拆边,反 ...
- ubuntu16.04字体设置
我在ubuntu下主要有2个应用,一个是终端,一个是firefox浏览器 1.在终端下,我喜欢“Courier 10 pitch regular”,字号是14.Courier是一种专门为程序员设计的字 ...
- 0x00 译文:Windows桌面应用入门选择
当你想要创建一个新的桌面应用的时候,第一个你需要做的决定是使用Win32 和COM 还是使用.NET两个选项. C++ 和 Win32 使你“离奖牌更近”,并使你可以获得最佳的应用性能..NET 使你 ...
- JCO 自定义DestinationDataProvider
要让JAVA程序能访问SAP系统,一般通过SAP JCO接口进行通讯,在获取到SAP的连接时需求提供一些连接参数,这些参数在最新的 JCO 3.0 中需要被保存到一个带有扩展名.jcoDestinat ...
- vue2 vue-router2 webpack1
转自:http://www.qinshenxue.com/article/20161106163608.html: 项目地址:https://github.com/qinshenxue/vue2-vu ...
- 关于液晶显示器的6bit面板、8bit面板及E-IPS(转)
原文:http://bbs.3dmgame.com/thread-2232447-1-1.html 1.什么是6bit面板.8bit面板 众所周知,液晶显示器 ...
- 编译hadoop,spark遇到的问题总结
编译hadoop2.6.4 1.JDK8版本过高,换成JDK7: 2.换成命令行mvn package -Pdist,native -DskipTests-Dtar-Dmaven.javadoc.sk ...
- 连接数据库通过配置文件app.config
ConfigurationManager类 public static class ConfigurationManager 命名空间: System.Configuration 程序集: Syste ...
- 浅谈Facebook的服务器架构(组图)
导读:毫无疑问,作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界众人所关注.CSDN博主yanghehong在他自己最新的一篇博客< Fa ...