XML(七)-DOM解析
来源:互联网 发布:易语言客户端发送数据 编辑:程序博客网 时间:2024/05/17 03:48
DOM解析
JAXP(Java API for XML Parsing) :用于XML解析的Java API。
本文通过一个实际的代码例子来说明如何用Java提供的DOM相关的类和接口解析XML:
首先,是XML文档:persons.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE persons [<!ENTITY xx "我不是一个随便的人,我随便起来不是人">]><persons> <![CDATA[ 从今天起,恶心才刚刚开始, 但是这很重要,我不会把不重要的东西教给大家! ]]> <!-- 这是xml文档的注释 --> <person id = "p01"> <name>张三</name> <age>15</age> <address>南京市</address> <info>&xx;</info> </person> <person id = "p02"> <name>李小龙</name> <age>20</age> <address>美国</address> </person> <person id = "p03"> <name>张小凡</name> <age>21</age> <address>香港</address> </person></persons>
新建Java类,解析如下:
package cn.org.kingdom.dom;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class DomParseTest { public static void main(String[] args)throws Exception { //step1:获得document解析器工厂 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //step2:获得document解析器 DocumentBuilder db = dbf.newDocumentBuilder(); //step3:通过document解析器得到文档对象 Document doc = db.parse(new File("src/persons.xml")); //step4:获得所有的person节点 NodeList list = doc.getElementsByTagName("person"); //step5:循环遍历 for(int i = 0 ;i<list.getLength();i++) { Node node = list.item(i); Element e = (Element) node; //注意元素<name></name>之间是文本节点也点新获取 String name = e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue(); String age = e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue(); String address = e.getElementsByTagName("address").item(0).getFirstChild().getNodeValue(); System.out.println(name+"-->"+age+"-->"+address); } }}
首先,我们需要建立一个解析器工厂,以利用这个工厂来获得一个具体的解析器对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
我们在这里使用DocumentBuilderFactory的目的是为了创建与具体解析器无关的程序,当DocumentBuilderFactory类的静态方法newInstance()被调用时,它根据一个系统变量来决定具体使用哪一个解析器。又因为所有的解析器都服从于JAXP所定义的接口,所以无论具体使用哪一个解析器,代码都是一样的。所以当在不同的解析器之间进行切换时,值需要更改系统变量的值,而不用更改任何代码。这就是工厂所带来的好处。
DocumentBuilder db = dbf.newDocumentBuilder();
当获得一个工厂对象之后,使用它的静态方法newDocumentBuilder(),可以获得一个DocumentBuilder对象。这个对象代表了具体的DOM解析器。
解析器的具体实现对于程序来说并不重要,然后,我们就可以利用这个解析器对文档进行解析了。Sun公司提供了默认的工厂和默认的解析器,上面的例子中就使用了默认的解析器。
阅读全文
0 0
- XML(七)-DOM解析
- XML DOM---解析xml dom
- DOM解析器(七)
- DOM解析器(七)
- 【XML】DOM解析XML
- 解析xml dom 解析
- xml解析 Dom解析
- DRP项目(七)----XML的四种解析器之DOM解析XML
- dom解析xml
- dom解析 xml
- dom解析xml
- 解析xml之--DOM
- Dom解析XML文档
- DOM解析XML文件
- dom解析xml
- dom解析xml
- xml文件解析-DOM
- JAVA解析XML DOM
- XML(四)-命名空间
- XML(五)-Schema验证
- XML(六)-DOM解析
- 灵活构建和拼接Laravel的SQL语句
- 面向对象-异常机制
- XML(七)-DOM解析
- XML(八)-XML的DOM解析
- ZCMU-1017: 勇者斗恶龙
- XML(九)-使用DOM来生成xml文档
- XML(十)- SAX解析
- Gradle for mac 安装配置
- Java8学习笔记(一)-初步认识Lambda表达式
- mac下面安装mysql问题
- Java8学习笔记(二)-函数式接口与方法引用