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中的事件机制

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

其中回车换行也算是一个元素,所以底下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文件的更多相关文章

  1. 使用DOM解析xml文件

    使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...

  2. DOM解析XML文件例子

    DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式. 一般分为以下几步: 1. 定义好目标XML文件路径path . 2. 实例化DOM解析工厂对象 ,Document ...

  3. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  4. 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点

    使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...

  5. DOM解析XML文件实例

    XML文件: response: <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www ...

  6. Qt中使用DOM解析XML文件或者字符串二(实例)

    介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...

  7. Python—使用xm.dom解析xml文件

    什么是DOM? 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口. 一个 DOM 的解析器在解析一个 XML 文档时,一次性读 ...

  8. DOM解析XML文件

    1.首先把第三方代码拖进工程 GDataXMLNode.h和GDataXMLNode.m这两个文件放进工程里面 2.引入libxml2库文件 3.将GDataXMLNode.h文件中的这两个东西在工程 ...

  9. Dom解析XML文件具体用法

    public class Dom4j { public static void main(String[] args) throws Exception { List<Student> l ...

随机推荐

  1. 各种语言的注释总结--from wiki

    Comments can be classified by: style (inline/block) parse rules (ignored/interpolated/stored in memo ...

  2. CentOS 6.5安装配置Nginx

    Ubuntu下安装nginx,直接apt-get install nginx就行了,很方便. 但是今天装了CentOS6.5,直接yum install nginx不行,要先处理下源,下面是安装完整流 ...

  3. POP数值动画

    POP数值动画 效果 源码 https://github.com/YouXianMing/Animations // // PopNumberController.m // Animations // ...

  4. MyBatis Lazy Loading

    MyBatis的Lazy Loading可以实现延迟查询Bean里的嵌套成员类,控制lazy loading的<settings>属性有 lazyLoadingEnabled: lazy ...

  5. Windows 7系统垃圾清理自写程序

    系统清理.bat @echo off color 0a title windows7系统垃圾清理--- echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★ echo ★☆ ★☆ ...

  6. OpenCV学习(22) opencv中使用kmeans算法

    kmeans算法的原理参考:http://www.cnblogs.com/mikewolf2002/p/3368118.html 下面学习一下opencv中kmeans函数的使用.      首先我们 ...

  7. Java 连接MS Access数据库

    java连接MS Access的两种方式: 1.JDBC-ODBC Java连接Access可以使用MS自带的管理工具-->数据源(ODBC)设置建立连接,这样就不需要导入jar.但是,如此一来 ...

  8. Sublime Text2格式化HMTL/CSS/JS插件HTML-CSS-JS Prettify

    之前格式化用过JSFormat,今天在GitHub发现了一个比较好的插件HTML-CSS-JS Prettify,具体的地址https://github.com/victorporof/Sublime ...

  9. Android中XML解析-SAX解析

    昨天由于时间比较匆忙只写了Android中的XML解析的Dom方式,这种方式比较方便,很容易理解,最大的不足就是内容多的时候,会消耗内存.SAX(Simple API for XML)是一个解析速度快 ...

  10. UNdelete

    --90兼容模式以上,2005+ -- http://raresql.com/2012/10/24/sql-server-how-to-find-who-deleted-what-records-at ...