XML DOM
XML DOM (XML Document Object Model) 定义一套访问和操作 XML 文档的标准方法。
DOM 把 XML 文档作为树结构来查看。能够通过 DOM 树来访问所有元素。可以修改或删除它们的内容,并创建新的元素。元素,它们的文本,以及它们的属性,都被认为是节点。
在下面的例子中,我们使用 DOM 引用从 <to> 元素中获取文本:
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue
- xmlDoc -由解析器创建的 XML 文档
- getElementsByTagName("to")[0] - 第一个 <to> 元素
- childNodes[0] - <to> 元素的第一个子元素(文本节点)
- nodeValue - 节点的值(文本本身)
XML Namespace (xmlns) 属性
XML 命名空间属性被放置于某个元素的开始标签之中,并使用以下的语法:
xmlns:namespace-prefix="namespaceURI"
当一个命名空间被定义在某个元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向某个实存的网页,这个网页包含着有关命名空间的信息。
XML 解析器通常会解析 XML 文档中所有的文本。
当某个 XML 元素被解析时,其标签之间的文本也会被解析:
<message>此文本也会被解析</message>
解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个例子中,其中的 <name> 元素包含着另外的两个元素(first 和 last):
<name><first>Bill</first><last>Gates</last></name>
而解析器会把它分解为像这样的子元素:
<name> <first>Bill</first> <last>Gates</last> </name>
CDATA
CDATA 内部的所有东西都会被解析器忽略。
假如文本中包含了大量的 "<" 和 "&" 字符 - 就像编程代码中经常出现的情况一样 - 那么这个 XML 元素就可以被定义为一个 CDATA 部分。
CDATA 区段开始于 "<![CDATA[",结束于 "]]>":
关于 CDATA 区段的注释:
CDATA 区段不能包含字符串 "]]>",所以,CDATA 区段的嵌套是不被允许的。
同时也需要确保在 "]]>" 字符串中没有空格或折行。
创建元素
createElement() 方法创建新的元素节点。
createTextNode() 方法创建新的文本节点。
appendChild() 方法向节点添加子节点(在最后一个子节点之后)。
如需创建带有文本内容的新元素,需要同时创建元素节点和文本节点。
下面的代码创建了一个元素 (<edition>),然后把它添加到第一个 <book> 元素中:
newel=xmlDoc.createElement("edition"); newtext=xmlDoc.createTextNode("First"); newel.appendChild(newtext); x=xmlDoc.getElementsByTagName("book"); x[0].appendChild(newel);
例子解释:
- 创建 <edition> 元素
- 创建值为 "First" 的文本节点
- 把这个文本节点追加到 <edition> 元素
- 把 <edition> 元素追加到第一个 <book> 元素
删除元素
removeChild() 方法删除指定的节点(或元素)。
下面的代码片段将删除第一个 <book> 元素中的第一个节点:
x=xmlDoc.getElementsByTagName("book")[0]; x.removeChild(x.childNodes[0]);
注释:上例的结果可能会根据所用的浏览器而不同。
Firefox 把新行字符当作空的文本节点,而 Internet Explorer 不是这样。
您可以在 w3school 的 XML DOM 教程中阅读到更多有关这个问题以及如何避免它的知识。
节点
根据 DOM,XML 文档中的每个成分都是一个节点。
DOM 是这样规定的:
- 整个文档是一个文档节点
- 每个 XML 标签是一个元素节点
- 包含在 XML 元素中的文本是文本节点
- 每一个 XML 属性是一个属性节点
- 注释属于注释节点
XML DOM 节点树
XML DOM 把 XML 文档视为一种树结构。这种树结构被称为节点树。
可通过这棵树访问所有节点。可以修改或删除它们的内容,也可以创建新的元素。
这颗节点树展示了节点的集合,以及它们之间的联系。这棵树从根节点开始,然后在树的最低层级向文本节点长出枝条
通过微软的 XML 解析器加载 XML
微软的 XML 解析器内建于 Internet Explorer 5 及更高版本中。
下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.load("books.xml");
代码解释:
- 第一行创建空的微软 XML 文档对象
- 第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
- 第三行告知解析器加载名为 "books.xml" 的文档