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. 仿LOL项目开发第九天

    仿LOL项目开发第九天 by 草帽 OK,今天我们完全换了一种风格,抛弃了Unity3d的c#语法,我们来写写java的项目. 说到java服务器,当然有些人可能鄙视java的服务器速度太慢,但是相对 ...

  2. 使用StringBuilder或StringBuffer简单优化

    使用StringBuilder或StringBuffer // join(["a", "b", "c"]) -> "a an ...

  3. Top N之MapReduce程序加强版Enhanced MapReduce for Top N items

    In the last post we saw how to write a MapReduce program for finding the top-n items of a dataset. T ...

  4. Linux命令缩写来由

    A 命令 全称 功能 备注 apt AdvancedPackaging Tool APT用来自动下载,配置,安装二进制或者源代码格式的软件包   awk Aho Weiberger and Kerni ...

  5. Winform中产生验证码图片

    1.创建ValidCode类: public class ValidCode { #region Private Fields private const double PI = 3.14159265 ...

  6. iOS开发-UIApplication和App启动状态

    UIApplication简单从字面上了解就是应用程序,开发的时候有的时候会根据需要调用其中的方法,看起来不起眼,实际在iOS开发UIApplication提供了iOS程序运行期间的控制和协作工作.每 ...

  7. jQuery的一个关键函数

    jQuery.extend = jQuery.fn.extend = function() { // copy reference to target object var target = argu ...

  8. jquery中filter(fn)的使用研究

    jquery中filter(fn)给出的官方说明是: 筛选出与指定函数返回值匹配的元素集合 这个函数内部将对每个对象计算一次 (正如 '$.each'). 如果调用的函数返回false则这个元素被删除 ...

  9. Java基础(九):抽象类

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象之外, ...

  10. OpenGL使用libPng读取png图片

    #include<stdarg.h> #include<png.h> #include<glut.h> #include<math.h> #includ ...