XML DOM

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);

    例子解释:

    1. 创建 <edition> 元素
    2. 创建值为 "First" 的文本节点
    3. 把这个文本节点追加到 <edition> 元素
    4. 把 <edition> 元素追加到第一个 <book> 元素

    TIY

    删除元素

    removeChild() 方法删除指定的节点(或元素)。

    下面的代码片段将删除第一个 <book> 元素中的第一个节点:

    x=xmlDoc.getElementsByTagName("book")[0];
    
    x.removeChild(x.childNodes[0]);

    TIY

    注释:上例的结果可能会根据所用的浏览器而不同。

    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" 的文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值