Dom解析XML文档

DOM Document Object Model 的缩写,即文档对象模型,它是 W 3C 组织推荐的处理 XML 的标准接口。 2004 4 7 W 3C 组织发布了 DOM Level3 Core 的推荐标准,有关 DOM 的技术报告可以在 http://www.w3.org/DOM/DOMTR.html 上查看。
 
DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W 3C 标准。 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 "image/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.w 3c .dom.DocumentType;
import org.w 3c .dom.Entity;
import org.w 3c .dom.NamedNodeMap;
import org.w 3c .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.w 3c .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();
              }
       }
}
如果那里不太清楚,请参考

你可能感兴趣的:(java,xml,dom,职场,休闲)