博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DOM解析器(七)
阅读量:2189 次
发布时间:2019-05-02

本文共 1925 字,大约阅读时间需要 6 分钟。

DocumentType节点

        DocumentType节点是Document节点的一个子节点。我们已经知道,解析器的parse方法将整个被解析的XML文件封装成一个Document节点返回,Document节点的两个子节点的类型分别是DocumentType类型和Element类型,其中的DocumentType节点对应着XML文件所关联的DTD文件,通过进一步获取该节点子孙节点来分析DTD文件中的数据。Document节点调用getDoctype() 返回当前节点的DocumentType子节点。

        获取DTD的基本信息

       假如XML文件中的DOCTYPE声明为:<!DOCTYPE 房子 PUBLIC  "-//ISO88//beijing//ForXML/Ch"  "b1.dtd",那么

       DocumentType节点调用getName()方法返回的是:房子

       调用getPublicId()方法返回的是:-//ISO88//beijing//ForXML/Ch
       调用getSystemId()方法返回的是:b1.dtd

        一个XML文件可以关联一个外部DTD或一个内部DTD,也可二者皆有(见第3.9节)。如果XML关联一个内部DTD,DocumentType节点调用getInternalSubset()方法可以返回内部DTD的内容。

        获取实体

        DTD文件中可以定义实体,然后与该DTD文件关联的XML文件可以通过实体引用使用该实体。实体又分为内部实体和外部实体,所谓内部实体就是实体的内容已经包含在DTD文件本身中;而外部实体是指实体的内容是DTD文件以外的其他文件。
解析器将实体封装为Entity节点,DocumentType节点调用
NamedNodeMap  getEntities()
方法可以得到全部的实体,该方法返回的NamedNodeMap对象由节点组成,这些节点可以被转换为Entity节点。Entity节点通过调用getTextContent()方法返回实体,如果实体是一个外部文件,Entity节点通过调用getInputEncoding()方法可以返回解析该实体所使用的编码;如果是内部实体,getInputEncoding()方法返回null。

CDATASection节点

        在XML文件中,标记内容中的文本数据不可以含有左尖括号、右尖括号、与符号、单引号和双引号这些特殊字符,如果想使用这些字符,办法之一是通过实体引用,如果需要许多这样的字符,文本数据中就会出现很多实体引用或字符引用,导致文本数据的阅读变得困难。使用CDATA(Character Data)段可以解决这一问题,CDATA段用“<![CDATA[”作为段的开始,用“]]>”作为段的结束,段开始和段结束之间称为CDATA段的内容,解析器不对CDATA段的内容做分析处理,因此,CDATA段中的内容可以包含任意的字符。

         在DOM规范中,解析器使用CDATASection节点封装CDATA段,CDATASection节点可以是Element的节点的子节点。

        节点数目的计算办法如下。

        首先将标记中交替出现的普通文本和CDATA段按照它们在标记中出现的先后顺序排列,如:
        普通文本1  CDATA段1  普通文本2  CDATA段2  普通文本3

       那么该标记对应的Element节点的子节点顺序如下。

1 /  Text节点:从“普通文本1”到“普通文本3”的区域,节点的文本内容是普通文本和CDATA段中的内容。
2 / CDATASection节点:从“CDATA段1”到“普通文本3”的区域,节点的文本内容是普通文本和CDATA段中的内容。
3 /  Text节点:从“普通文本2”到“普通文本3”的区域,节点的文本内容是普通文本和CDATA段中的内容。
4 / CDATASection节点:从“CDATA段2”到“普通文本3”的区域,节点的文本内容是普通文本和CDATA段中的内容。
5 / Text节点:“普通文本3”,节点的文本内容是普通文本。

        表示CDATASection节点的常量是Node.CDATA_SECTION_NODE,一个节点调用short getNodeType()方法返回的值如果等于Node.CDATA_SECTION_NODE,那么该节点就是CDATASection节点。CDATASection节点使用String getWholeText()方法获取节点中的文本,即CDATA段中的文本(包括其中的空白字符)。

注意:对于CDATASection节点,getNodeName()方法返回的是“#cdata-section”。

转载地址:http://ofyub.baihongyu.com/

你可能感兴趣的文章
【自动化测试】自动化测试需要了解的的一些事情。
查看>>
【selenium】selenium ide的安装过程
查看>>
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>