XML 教程

XML 教程 XML 简介 XML 用途 XML 树结构 XML 语法 XML 元素 XML 属性 XML 命名空间 XML Display XML HttpRequest XML Parser XML DOM XML XPath XML XSLT XML XQuery XML XLink XML 验证器 XML DTD XML Schema XML 服务器 XML 实例 XML 测验

XML AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用程序 AJAX 实例

XML DOM

DOM 简介 DOM 节点 DOM 访问节点 DOM 节点信息 DOM 节点列表 DOM 节点遍历 DOM 节点导航 DOM 获取节点 DOM 更改节点 DOM 删除节点 DOM 替换节点 DOM 创建节点 DOM 添加节点 DOM 克隆节点 DOM 实例

XPath 教程

XPath 简介 XPath 节点 XPath 语法 XPath 轴(Axes) XPath 运算符 XPath 实例

XSLT 教程

XSLT 简介 XSL 语言 XSLT 转换 XSLT <template> XSLT <value-of> XSLT <for-each> XSLT <sort> XSLT <if> XSLT <choose> XSLT Apply XSLT 客户端 XSLT 服务端 XSLT 编辑 XML XSLT 实例

XQuery 教程

XQuery 简介 XQuery 实例 XQuery FLWOR 表达式 XQuery FLWOR + HTML XQuery 术语 XQuery 语法 XQuery 添加元素和属性 XQuery 选择和过滤 XQuery 函数

XML DTD

DTD 简介 DTD 构建模块 DTD 元素 DTD 属性 DTD 元素 vs. 属性 DTD 实体 DTD 实例

XSD Schema

XSD 简介 XSD How To XSD <schema> XSD 元素 XSD 属性 XSD 限制

XSD Complex

XSD 复杂元素 XSD 空元素 XSD 仅限元素 XSD 纯文本元素 XSD 混合 XSD 指示器 XSD <any> XSD <anyAttribute> XSD 替换 XSD 实例

XSD 数据类型

XSD 字符串 XSD 日期 XSD 数值 XSD 杂项 XSD 参考手册

Web Services

XML Services 简介 XML WSDL XML SOAP XML RDF XML RSS

参考手册

DOM 节点类型 DOM 节点 DOM NodeList DOM NamedNodeMap DOM 文档 DOM 元素 DOM 属性 DOM 文本 DOM CDATA DOM 注释 DOM XMLHttpRequest DOM 解析器 XSLT 元素 XSLT/XPath 函数


XML DOM 遍历节点树

遍历意味着在节点树中循环或遍历。


遍历节点树

通常需要循环一个XML文档,例如:当您要提取每个元素的值时。

这称为遍历节点树

下面的实例遍历<book>的所有子节点,并显示它们的名称和值:

实例

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");

// documentElement always represents the root node
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length ;i++) {
    txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>

</body>
</html>

输出:

title: Everyday Italian
author: Giada De Laurentiis
year: 2005
尝试一下 »

实例说明:

  1. 将XML字符串加载到 xmlDoc 中
  2. 获取根元素的子节点
  3. 对于每个子节点,输出文本节点的节点名和节点值


DOM解析中的浏览器差异

所有现代浏览器都支持W3C DOM规范。

但是,浏览器之间有一些不同。一个重要的区别是:

  • 他们处理空白和新行的方式

DOM - 空白和新行

XML通常包含节点之间的新行或空白字符。通常情况下,文档是由一个简单的编辑器(如记事本)编辑的。

以下实例(由记事本编辑)在每行和每个子节点前面的两个空格之间包含CR/LF(新行):

<book>
  <title>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

Internet Explorer 9 和更早版本不将空白或新行视为文本节点,而其他浏览器则是这样。

下面的实例将输出根元素(books.xml)的子节点数。IE9及更早版本将输出4个子节点,而IE10及更高版本和其他浏览器将输出9个子节点:

实例

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Number of child nodes: " + x.length;
}
尝试一下 »

PCDATA - 解析字符数据

XML解析器通常解析XML文档中的所有文本。

解析XML元素时,也会解析XML标记之间的文本:

<message>This text is also parsed</message>

解析器这样做是因为XML元素可以包含其他元素,如本例所示,<name>元素包含两个其他元素(第一个和最后一个):

<name><first>Bill</first><last>Gates</last></name>

解析器会把它分解成如下子元素:

<name>
  <first>Bill</first>
  <last>Gates</last>
</name>

Parsed Character Data (PCDATA) 是一个术语,用于描述将由XML解析器解析的文本数据。


CDATA - (Unparsed) 字符数据

术语CDATA用于描述不应由XML解析器解析的文本数据。

像"<"和"&"这样的字符在XML元素中是非法的。

"<" 将生成错误,因为解析器将其解释为新元素的开头。

"&" 将生成错误,因为解析器将其解释为字符实体的开头。

有些文本,如JavaScript代码,包含大量"<"或"&"字符。为了避免错误,脚本代码可以定义为CDATA。

解析器将忽略CDATA节中的所有内容。

CDATA 节以 "<![CDATA["开头 以 "]]>"结束:

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    } else {
        return 0;
    }
}
]]>
</script>

在上面的例子中,CDATA部分中的所有内容都被解析器忽略。

节点 CDATA 注意事项:

CDATA 部分不能包含字符串 "]]>". CDATA 不允许嵌套.

"]]>" 标记CDATA节结尾的不能包含空格或换行符。