Dom解析XML文档
精选 转载DOM是Document Object Model的缩写,即文档对象模型,它是W3C 组织推荐的处理XML的标准接口。2004年4月7日 ,W3C 组织发布了DOM Level3 Core的推荐标准,有关DOM的技术报告可以在http://www.w3.org/DOM/DOMTR.html上查看。
DOM是用与平台和语言无关的方式表示XML文档的官方W3C 标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。
Dom解析的一个简单例子:
1. xml文件hr.xml:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hr PUBLIC "-//xin sun//DTD HR 1.0//ZH"
"hr.dtd"
[
<!ENTITY name "人力资源">
]>
<hr>&name;</hr>
hr.dtd文件:
<!ELEMENT hr (#PCDATA)>
<!ENTITY % entitiesDecl SYSTEM "entity.dtd">
%entitiesDecl;
entity.dtd文件:
<!NOTATION gif SYSTEM "p_w_picpath/gif">
<!NOTATION jpg SYSTEM "iexplore.exe">
<!ENTITY logo SYSTEM "http://192.168.0.13:8080/logo.gif" NDATA gif>
<!ENTITY banner SYSTEM "http://192.168.0.13:8080/banner.gif" NDATA jpg>
2. DocTypePrinter .java代码:
package xml.dom;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c .dom.DocumentType;
import org.w3c .dom.Entity;
import org.w3c .dom.NamedNodeMap;
import org.w3c .dom.Notation;
import org.xml.sax.SAXException;
public class DocTypePrinter {
/**
* @param args
*/
public static void main(String[] args) {
new DocTypePrinter();
}
public DocTypePrinter() {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
org.w3c .dom.Document doc = db.parse(new File("hr.xml"));// 创建一个文档节点
DocumentType dt = doc.getDoctype();// 获得文档类型属性
System.out.println("文档类型公共标识符:"+dt.getPublicId()+"\t文档类型系统标识符:"+dt.getSystemId());
System.out.println("外部DTD文件的名称:"+dt.getName());// 输出外部DTD文件的名字
NamedNodeMap entity = dt.getEntities();// 获得文档引用的实体节点
NamedNodeMap notation = dt.getNotations();// 获得文档中实体用到的记号节点
for (int i = 0; i < entity.getLength(); i++) {// 输出文档中引用的所有的实体信息
Entity en = (Entity) entity.item(i);
System.out
.println("实体名:" + en.getNodeName() + " 实体系统标识符:"
+ en.getSystemId() + " 实体的记号名称:"
+ en.getNotationName());
}
for (int i = 0; i < notation.getLength(); i++) {// 输出文档中引用的所有的记号信息
Notation no = (Notation) notation.item(i);
System.out.println("记号的名称:" + no.getNodeName() + " 记号的系统标识符:"
+ no.getSystemId());
}
for (int i = 0; i < entity.getLength(); i++) {
Entity en = (Entity) entity.item(i);// 实体
if (en.getNotationName() != null)
for (int j = 0; j < notation.getLength(); j++) {
Notation no = (Notation) notation.item(j);// 实体的符号记号
if (en.getNotationName().equals(no.getNodeName())) {
String[] st = {
"C:\\Program Files\\Internet Explorer\\iexplore.exe",
en.getSystemId() };
Runtime.getRuntime().exec(st);// 用指定的程序运行该未解析的实体资源
}
}
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
如果那里不太清楚,请参考
下一篇:我的友情链接
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
使用DOM解析XML文档
Java实现DOM解析XML文档内容
Java 程序 package -
dom解析方式对xml文档进行操作
java就业
java xml dom Test
















