dom 解析xml文件
JAXP技术
JAXP即Java Api for Xml Processing该API主要是SUN提供的用于解析XML数据的一整套解决方案,主要包含了DOM和SAX解析技术。大家可以参见SUN的以下两个包:
javax.xml.parsers.* 主要存储的是解析器
org.w3c.dom.*或org.w3c.sax.* 主要存储的是DOM解析或SAX解析需要的API
DOM解析主要采用DOM树的方式进行XML的数据解析。如:JavaScript中的DOM操作
SAX解析主要采用事件的方式进行XML的数据解析。 如:JavaScript中的事件机制

- 编写需要解析的XML文件
- 获取相应的XML解析器对象
- 使用API获取数据
- 返回数据给开发者

其中回车换行也算是一个元素,所以底下xml文件中的users节点有个节点,其中3个为#text的打印
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<users>
<user>
<name>jack</name>
<age>26</age>
<address>gz</address>
</user>
<user><name>二货</name><age>28</age><address>天河区</address></user>
</users>
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; public class Demo1 { // 2. 提供获取解析器的方法
public static DocumentBuilder getParser()throws Exception{
// 2.1 创建工厂类对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.2 获取解析器对象
DocumentBuilder parser = factory.newDocumentBuilder();
return parser;
} // 3. 提供获取DOM数据的方法
public static Document getDOM(File file)throws Exception{
// 3.1 获取解析器
DocumentBuilder parser = getParser();
// 3.2解析数据
Document dom = parser.parse(file);
return dom;
} // 4. 提供解析根元素的数据的方法
public static void getRoot(File file)throws Exception{
// 4.1 获取DOM树
Document dom = getDOM(file);
// 4.2遍历dom树找根元素
Node node = dom.getElementsByTagName("users").item(0);
// 4.3输出根元素的名
System.out.println(node.getNodeName());
// 4.4根据节点直接的关系获取根元素
NodeList list = dom.getChildNodes();
Node root = list.item(0);
System.out.println(root.getNodeName());
root = dom.getFirstChild();
System.out.println(root.getNodeName());
root = dom.getLastChild();
System.out.println(root.getNodeName());
} // 5. 添加一个user节点
public static Document addElement(File file)throws Exception{
// 5.1获取DOM树
Document dom = getDOM(file);
// 5.2创建user元素
Element user = dom.createElement("user");
Element name = dom.createElement("name");
Element age = dom.createElement("age");
Element address = dom.createElement("address"); name.setTextContent("焦宁波");
age.setTextContent("28");
address.setTextContent("天河区");
// 5.3建立关系
Element root = (Element) dom.getFirstChild();
user.appendChild(name);
user.appendChild(age);
user.appendChild(address);
root.appendChild(user);
// 5.4返回修改后的DOM树对象
return dom;
} // 6. 修改第二个user的年龄为30岁
public static Document modifyElement(File file)throws Exception{
// 6.1获取DOM树
Document dom = getDOM(file);
// 6.2获取第二个age元素
Node age2 = dom.getElementsByTagName("age").item(1);
// 6.3设置文本值
age2.setTextContent("30");
return dom;
} // 7. 删除第一个user节点
public static Document removeElement(File file)throws Exception{
// 7.1获取DOM树
Document dom = getDOM(file);
// 7.2获取user的父亲
dom.getElementsByTagName("user").item(0).getParentNode().removeChild(dom.getElementsByTagName("user").item(0));
return dom;
} // 8. 使用关系获取节点
public static void searchElement(File file)throws Exception{
// 8.1获取DOM树
Document dom = getDOM(file);
// 8.2获取第二个user的所有的子元素并输入元素名
Element user2 = (Element) dom.getElementsByTagName("user").item(1);
// 8.3获取所有的儿子
NodeList list = user2.getChildNodes();
// 8.4遍历所有的孩子
for(int i = 0;i<list.getLength();i++){
Node node = list.item(i);
System.out.println(node.getNodeName());
}
// 8.5获取第二个user的address元素
Element address2 = (Element) list.item(2);
System.out.println(address2.getNodeName());
Node age2 = address2.getPreviousSibling();
System.out.println(age2.getNodeName()); Element name2 = (Element) list.item(0);
System.out.println(name2.getNodeName());
age2 = name2.getNextSibling();
System.out.println(age2.getNodeName()); } // 提供一个工具方法将内存中的DOM树存储到磁盘的指定文件中
public static void writeDOM2XML(Document dom,File file)throws Exception{
// 1.获取转换器的工厂类对象
TransformerFactory factory = TransformerFactory.newInstance();
// 2.获取转换器对象
Transformer trans = factory.newTransformer();
// 3.转换
trans.transform(new DOMSource(dom), new StreamResult(new FileOutputStream(file)));
} public static void main(String[] args) throws Exception{
File file = new File("users.xml");
//getRoot(file);
//Document dom = addElement(file);
//Document dom = modifyElement(file);
//Document dom = removeElement(file);
//writeDOM2XML(dom, file);
searchElement(file); } }
dom 解析xml文件的更多相关文章
- 使用DOM解析xml文件
使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...
- DOM解析XML文件例子
DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式. 一般分为以下几步: 1. 定义好目标XML文件路径path . 2. 实例化DOM解析工厂对象 ,Document ...
- JAVA中使用DOM解析XML文件
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
- 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点
使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...
- DOM解析XML文件实例
XML文件: response: <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www ...
- Qt中使用DOM解析XML文件或者字符串二(实例)
介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...
- Python—使用xm.dom解析xml文件
什么是DOM? 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口. 一个 DOM 的解析器在解析一个 XML 文档时,一次性读 ...
- DOM解析XML文件
1.首先把第三方代码拖进工程 GDataXMLNode.h和GDataXMLNode.m这两个文件放进工程里面 2.引入libxml2库文件 3.将GDataXMLNode.h文件中的这两个东西在工程 ...
- Dom解析XML文件具体用法
public class Dom4j { public static void main(String[] args) throws Exception { List<Student> l ...
随机推荐
- 使用 DES 算法对数据加密
DES算法 ☆提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改 ☆具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握 ☆DES密码体制的安全性应该不依赖于算法的保 ...
- SQL_DDL_建库建表
--IF DB_ID('testdb') IS NULL --CREATE DATABASE testdb USE master GO IF EXISTS ( SELECT * FROM sys.da ...
- 如何让Oracle表及字段显示为区分大小写(转)
http://www.itpub.net/thread-1703955-1-1.html
- js读取json方法
json也是对象,可以直接使用对象调用 var json = {contry:{area:{man:"12万",women:"10万"}}}; json.con ...
- 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法
整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...
- shell more less cat
cat 连续显示.查看文件内容 more 分页查看文件内容 less 分页可控制查看文件内容 通俗点说: cat一次性把文件内容全部显示出来,管你看不看得清,显示完了cat命令就返回了,不能进行交互式 ...
- 2015 HDU 多校联赛 5363 Key Set
2015 HDU 多校联赛 5363 Key Set 题目: http://acm.hdu.edu.cn/showproblem.php? pid=5363 依据前面给出的样例,得出求解公式 fn = ...
- c语言訪问excel
直接通过格式化读取文件就可实现,见附件
- android 动画具体解释(二)
以下就開始学习属性动画的基本使用方法,我们来看属性动画的继承关系,例如以下如所看到的: 显然关注的焦点应该是ValueAnimator,ObjectAnimator这两个类啦,ObjectAnimat ...
- ArcGIS Pro体验03——主界面
主界面和Office类似,应该上手比较快.新建Map后,加载了美国地图,毕竟是ESRI公司嘛.除项目(PROJECT),另外还有六个菜单面板,分别是地图(MAP).插入(INSERT).分析(ANAL ...