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 ...
随机推荐
- [翻译] Haneke(处理图片缓存问题)
Haneke https://github.com/hpique/Haneke A lightweight zero-config image cache for iOS. 轻量级0配置图片缓存. H ...
- [翻译] SWTableViewCell
SWTableViewCell An easy-to-use UITableViewCell subclass that implements a swippable content view whi ...
- Java遍历Map键、值。获取Map大小的方法
Map读取键值对,Java遍历Map的两种实现方法 第一种方法是根据map的keyset()方法来获取key的set集合,然后遍历map取得value的值 import java.util.HashM ...
- RestClient POST
SSL: ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyError ...
- 【BZOJ】【1007】【HNOI2008】水平可见直线
计算几何初步 其实是维护一个类似下凸壳的东西?画图后发现其实斜率是单调递增的,交点的横坐标也是单调递增的,所以排序一下搞个单调栈来做就可以了…… 看了hzwer的做法…… /************* ...
- DDR SDRAM芯片DQS的作用以及读写DQS/DQ对齐方式不同的原因
节选内容转载自https://www.design-reuse.com/articles/13805/the-love-hate-relationship-with-ddr-sdram-control ...
- LZO 使用和介绍
LZO说明 摘要 LZO 是一个用 ANSI C 语言编写的无损压缩库.他能够提供非常快速的压缩和解压功能.解压并不需要内存的支持.即使使用非常大的压缩比例进行缓慢压缩出的数据,依然能够非常快速的解压 ...
- iOS开发-Get请求,Post请求,同步请求和异步请求
标题中的Get和Post是请求的两种方式,同步和异步属于实现的方法,Get方式有同步和异步两种方法,Post同理也有两种.稍微有点Web知识的,对Get和Post应该不会陌生,常说的请求处理响应,基本 ...
- 亚马逊AWS免费套餐EC2安装centos连接登录并创建root
前言:刚开始使用亚马逊的AWS的免费套餐EC2,由于个人习惯使用centos系统,所以果断安装,但是AWS为了安全性,默认禁止用户使用root账户,导致安装配置环境各种问题.所以我把从安好系统后遇到的 ...
- 一键切换皮肤的解决思想及iframe嵌套时寻找下级iframe的方法
项目中有个一键切换皮肤的功能,感觉还不错,记录下,就是各颜色样式设置起来太复杂了,不知道有没有更简便的方法: 1.切换皮肤结构层 <li title="<s:text name= ...