tinyxml学习总结


1.XML DOM 节点树

<bookstore>
  
<book category="cooking">
    
<title lang="en">Everyday Italian</title> 
    
<author>Giada De Laurentiis</author> 
    
<year>2005</year> 
    
<price>30.00</price> 
  
</book>
</bookstore>


父、子和同级节点

节点树中的节点彼此之间都有等级关系。

父、子和同级节点用于描述这种关系。父节点拥有子节点,位于相同层级上的子节点称为同级节点(兄弟或姐妹)。

  • 在节点树中,顶端的节点成为根节点
  • 根节点之外的每个节点都有一个父节点
  • 节点可以有任何数量的子节点
  • 叶子是没有子节点的节点
  • 同级节点是拥有相同父节点的节点

下面的图片展示出节点树的一个部分,以及节点间的关系:


注释:父节点:Parent Node,子节点:Children Node,同级节点:Sibling Node。

XML 文档中的每个成分都是一个节点

节点

根据 DOM,XML 文档中的每个成分都是一个节点

DOM 是这样规定的:

  • 整个文档是一个文档节点
  • 每个 XML 标签是一个元素节点(element)
  • 包含在 XML 元素中的文本是文本节点(text)
  • 每一个 XML 属性是一个属性节点(attribute)
  • 注释属于注释节点

    DOM 实例

    请看下面的 XML 文件 (books.xml):

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <bookstore>
    <book category="COOKING">
      
    <title lang="en">Everyday Italian</title> 
      
    <author>Giada De Laurentiis</author> 
      
    <year>2005</year> 
      
    <price>30.00</price> 
    </book>
    <book category="CHILDREN">
      
    <title lang="en">Harry Potter</title> 
      
    <author>J K. Rowling</author> 
      
    <year>2005</year> 
      
    <price>29.99</price> 
    </book>
    <book category="WEB">
      
    <title lang="en">XQuery Kick Start</title> 
      
    <author>James McGovern</author> 
      
    <author>Per Bothner</author> 
      
    <author>Kurt Cagle</author> 
      
    <author>James Linn</author> 
      
    <author>Vaidyanathan Nagarajan</author> 
      
    <year>2003</year> 
      
    <price>49.99</price> 
    </book>
    <book category="WEB">
      
    <title lang="en">Learning XML</title> 
      
    <author>Erik T. Ray</author> 
      
    <year>2003</year> 
      
    <price>39.95</price> 
    </book>
    </bookstore>

     

     

    在上面的 XML 中,根节点是 <bookstore>。文档中的所有其他节点都被包含在 <bookstore> 中。

    根节点 <bookstore> 有四个 <book> 节点。

    第一个 <book> 节点有四个节点:<title>, <author>, <year> 以及 <price>,其中每个节点都包含一个文本节点,"Everyday Italian", "Giada De Laurentiis", "2005" 以及 "30.00"。


    文本总是存储在文本节点中

    在 DOM 处理中一个普遍的错误是,认为元素节点包含文本。

    不过,元素节点的文本是存储在文本节点中的。

    在这个例子中:<year>2005</year>,元素节点 <year>,拥有一个值为 "2005" 的文本节点。

    "2005" 不是 <year> 元素的值!


    大多数浏览器都内建了供读取和操作 XML 的 XML 解析器。解析器把 XML 转换为 JavaScript 可存取的对象。


    解析 XML

    所有现代浏览器都内建了用于读取和操作 XML 的 XML 解析器。

    解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象。

    微软的 XML 解析器与其他浏览器中的解析器是有差异的。微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都含有遍历 XML 树、访问、插入及删除节点的函数。

    Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象

    <books> 
      <book> 
      <author>Jack Herrington</author> 
      <title>PHP Hacks</title> 
      <publisher>O'Reilly</publisher> 
      </book> 
      <book> 
      <author>Jack Herrington</author> 
      <title>Podcasting Hacks</title> 
      <publisher>O'Reilly</publisher> 

      </book> 

      </books> 


     当 XML 文档的标记结构和内容得到外部模式文件的验证后,XML 文档就是正确的。模式文件可以用不同的格式指定。对于本文来说,所需要的只是格式良好的 XML 


    树顶部的 books 节点有两个 book 子标记。在每本书中,有 author、publisher 和 title 几个节点。author、publisher 和 title 节点分别有包含文本的文本子节点。


     

     

     

     

     

     

    2.tinyXML

    DOM库是把XML格式的数据读成DOM对象,读到内存中,是一种树数据结构,完成对树的遍历。.NET中有DOM解析,但是由于考虑到要跨平台,.NET毕竟是MS的东西,功能是很强大,但是缺点也很明显。所以我们还是要看看tinyxml这个和OS或平台无关的第三方开源库。

    在TinyXML中,根据XML的各种元素来定义了一些类:

            TiXmlBase:整个TinyXML模型的基类。
            TiXmlAttribute:对应于XML中的元素的属性。
            TiXmlNode:对应于DOM结构中的节点。
            TiXmlComment:对应于XML中的注释。
            TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。
            TiXmlDocument:对应于XML的整个文档。
            TiXmlElement:对应于XML的元素。
            TiXmlText:对应于XML的文字部分。
            TiXmlUnknown:对应于XML的未知部分。 
            TiXmlHandler:定义了针对XML的一些操作。


 

 

可以看出整个tinyXML的类结构是很简单的,就是简单的继承,我们看看下面的这个例子"demo.xml"就会更加的明白;


不使用预编译头,不然编译出错,把tinyxml下的2个头文件和4个原文件包含在工程里。



 

posted on 2008-09-19 21:06  风荷小筑  阅读(913)  评论(0)    收藏  举报