XML DOM 定义访问和操作XML文档的标准方法。
前面所述,XML是为了共享数据给创造出来的标准,是独立于语言和平台的。
同理,XML DOM这种访问和操作(获取,更改,添加或者删除)XML文档的标准,也是独立于语言和平台的。
站在开发者的角度,xml dom:
1.用于 XML 的标准对象模型
2.用于 XML 的标准编程接口
3.中立于平台和语言
XML 文档中的每个成分都是一个节点。
整个文档是一个文档节点。
每个 XML 元素是一个元素节点。
包含在 XML 元素中的文本是文本节点。
每一个 XML 属性是一个属性节点。
注释是注释节点。
#####注意:整个文档本身都当成一个节点,挺出乎意料的。
<?xml version="1.0" encoding="UTF-8"?>
<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" cover="paperback">
<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”。
#####注意:一个普遍的错误是,认为元素节点包含文本。
事实上,元素节点的文本是存储在文本节点中的。
在这个实例中:year 2005/year,元素节点 year,拥有一个值为 “2005” 的文本节点。
“2005” 不是 元素的值!
#####如果没注意到这点,用通常c语言的观点来说,year是个变量,year的值为2005,这是错误的!!!
因为 XML 数据是按照树的形式进行构造的,所以可以在不了解树的确切结构且不了解其中包含的数据类型的情况下,对其进行遍历。
由此,XML才是可扩展的,它能变成任何你需要的文档,而无需去修改应用程序。
#####个人理解
理论扯了这么多,标准方法是方法,标准规定是规定,具体到我们自己的程序里,到底如何生成xml,又如何访问和操作xml?
①最简单生成xml的方式使用一个xml文本编辑器来手写。
②要访问和操作xml,用c语言(或者你用的其他语言)写一个读取文本文件的程序,把字符串取出来进行对比,判断等等。
稍微思考一下,就会发现以上方法不实用。
原因之一,简单的xml,行数不多手写还勉强可行,如果行数太多了呢?手写太麻烦,还容易出错,能利用程序来帮忙自动写是最好的。但是程序从哪里来,自己编写?
原因之二,想操作xml文件,如果按照普通文本的读写,比如定义好结构体用来存储,fscanf或者fges等等,一旦xml内容改变(增添删除)了,程序只能修改重新编译,这是回到了最初的老路,“披着xml皮”,玩得还是fopen文本文件那一套。
要想真正达到xml独立无关,符合xml dom标准,而非“披着xml的皮”,就需要自己编写一个“xml 解析器”,这会用到编译原理,数据结构,软件工程等相关知识,初学者压根做不到。
最实际的方式,还是使用别人已经做好的库,恰好c语言就有不少优秀xml解析库,比如iibxml,minixml,tinyxml等等,很多还是开源的。
这样能够满足“当前有xml可用”,“以后阅读xml解析器源码再提高个人能力”两种方式。