DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom、org.xml.sax 和javax.xml.parsers包就可以满意条件了。
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。
(2)org.xml.sax 用于对XML进行语法分析的事件驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。
先来写一个xml文件(DTD文件请参阅XML DTD那篇博文):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "D:\workspace\XML\WebRoot\WEB-INF\book.dtd">
<book>
<bookname
name="XML详解" font="GB2312"></bookname>
<authors>
<author
name="张孝祥" sex="男" age="45"></author>
<author
name="王勇" sex="男" age="35"></author>
<author
name="王波" sex="男" age="30"></author>
</authors>
<price
value="¥55"></price>
<publishdate>
<value>2009-08-18</value>
</publishdate>
</book>
再来写解析xml文件的java文件:
package com.xml.jdk;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationExcep tion;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException ;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XPathForXml {
public
void parseXMLWithJdk(){
try
{
//读取book.xml到内存
DocumentBuilderFactory
dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder
dbd = dbf.newDocumentBuilder();
Document doc =
dbd.parse(new FileInputStream("D:\\workspace\\XML\\WebRoot\\WEB-INF\\book.xml"));
//通过XML获得book的authors的author子节点列表
XPathFactory
f = XPathFactory.newInstance();
XPath path = f.newXPath();
NodeList authors=
(NodeList) path.uate("book/authors/author", doc,XPathConstants.NODESET);
System.out.println(authors.getLength());
//遍历取到的元素
if(authors!=null){
for(int
i=0;i<authors.getLength();i++){
Node
author =
authors.item(i);
int
n = i + 1;
System.out.print(n+". 名字:"+author.getNodeName());
System.out.println();
}
}
//获得book的authors的第一个子节点,注意NODESET和NODE的区别
Node
author= (Node) path.uate("book/authors/author", doc,XPathConstants.NODE);
System.out.println(" 名称:"+author.getNodeName());
System.out.println(" 内容:"+author.getTextContent());//如果存在内容则返回内容,不存在则返回空
//获取节点的属性
NamedNodeMap
attr = author.getAttributes();
System.out.println(" 该节点的属性个数"+attr.getLength());
//遍历元素的属性
if(attr!=null){
for(int
i=0;i<attr.getLength();i++){
int
n = i + 1;
System.out.print(" 属性"+n+" 名称:"+attr.item(i).getNodeName());
System.out.print(" 值:"+attr.item(i).getNodue());
System.out.print(" 类型:"+attr.item(i).getNodeType());
System.out.println();
}
}
}
catch (ParserConfigurationExcep tion
e) {
e.printStackTrace();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (SAXException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch (XPathExpressionException e)
{
e.printStackTrace();
}
}
public
static void main(String[] args) {
new
XPathForXml().parseXMLWithJdk();
}
}
下面对DOM读取XML的代码进行讲解:
(1)得到DOM解析器的工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
得到javax.xml.parsers.DocumentBuilderFactory;类的实例就是我们要的解析器工厂
(2)从DOM工厂获得DOM解析器
DocumentBuilder dbd = domfac.newDocumentBuilder();
通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器
(3)把要解析的XML文档转化为输入流,以便DOM解析器解析它
InputStream is=new FileInputStream("D:\\workspace\\XML\\WebRoot\\WEB-INF\\book.xml");
InputStream是一个接口。
(4)解析XML文档的输入流,得到一个Document
Document doc=dombuilder.parse(is);
由XML文档的输入流得到一个org.w3c.dom.Document对象,以后的处理都是对Document对象进行的
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。
(2)org.xml.sax 用于对XML进行语法分析的事件驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。
先来写一个xml文件(DTD文件请参阅XML DTD那篇博文):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "D:\workspace\XML\WebRoot\WEB-INF\book.dtd">
<book>
</book>
再来写解析xml文件的java文件:
package com.xml.jdk;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationExcep
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XPathForXml {
}
下面对DOM读取XML的代码进行讲解:
(1)得到DOM解析器的工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
得到javax.xml.parsers.DocumentBuilderFactory;类的实例就是我们要的解析器工厂
(2)从DOM工厂获得DOM解析器
DocumentBuilder dbd = domfac.newDocumentBuilder();
通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器
(3)把要解析的XML文档转化为输入流,以便DOM解析器解析它
InputStream is=new FileInputStream("D:\\workspace\\XML\\WebRoot\\WEB-INF\\book.xml");
InputStream是一个接口。
(4)解析XML文档的输入流,得到一个Document
Document doc=dombuilder.parse(is);
由XML文档的输入流得到一个org.w3c.dom.Document对象,以后的处理都是对Document对象进行的
本文介绍如何利用JDK自带的DOM编程接口解析XML文件,包括创建解析器、读取XML文档并使用XPath表达式查询特定节点。
&spm=1001.2101.3001.5002&articleId=51880578&d=1&t=3&u=4601f22c2d0e4449a0478ebfc798bffc)
5274

被折叠的 条评论
为什么被折叠?



