XML DOM

Posted 九涅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML DOM相关的知识,希望对你有一定的参考价值。

XML DOM 教程
XML文档对象模型定义访问和操作XML文档的标准方法。
DOM将 XML文档 作为一个树形结构,而树叶被定义为节点。
XML DOM 简介
XML DOM 定义了 访问和处理 XML文档的标准方法。
XML DOM 是XML Docment Object Model(文档对象模型) 的缩写。
什么是DOM?
DOM是W3C(万维网联盟)的推荐标准。
DOM定义了 访问 诸如XML和Xhtml文档的 标准。
“W3C文档对象模型(DOM)是一个 使 程序和脚本 有能力 动态地 访问和更新 文档的内容。”
W3C DOM 被分为3个;不同的部分/级别(parts/levels):
核心 DOM :用于 任何 结构化文档的__标准模型。
XML OOM : 用于 ________XML文档的__标准模型。
HTML DOM :用于 _______HTML文档的__标准模型。

DOM 定义了 所有文档元素的对象和属性,以及访问他们的方法(接口)

什么是HTML DOM?
HTML DOM 定义了 所有HTML元素的对象和属性,以及访问他们的方法(接口);
什么是XML DOM?
XML DOM是:
·用于XML的标准对象模型
·用于XML的标准编程接口
·中立于平台和语言
·W3C的标准
XML DOM定义了所有XML元素的对象和属性,以及访问塔门的方法(接口)
XML DOM是用于获取、更改、添加或删除XML元素的标准。

XML DOM 节点
XML DOM 节点
XML 文档中的 每个成分 都是一个节点。
DOM是这样规定的:
·整一个文档___________是一个______文档节点。
·每一个XML标签________是一个______元素节点。
·包含在XML元素中的文本是__________文本节点。
·每一个XML属性________是一个______属性节点。
·注释属于_________________________注释节点。
DOM 实例
在上面的XML中,根节点<bookstore>.文档的所有其他节点都被包含在<bookstore>中。
根节点<bookstore>有四个<book>节点。
第一个<book>节点有四个节点:<title>,<author>,<year>以及<price>,其中每个节点都包含一个文本节点。
文本总是储存在文本节点中。
在DOM处理中一个普遍的错误是,认为元素节点包含文本。
元素节点的文本是储存在文本节点中的。
例:<year>2005</year>,元素节点<year>,拥有一个值为“2005”的文本节点。“2005”不是<year>元素的值!

XML DOM 结点树
XML DOM 把 XML DOM文档 视为一颗节点树(node-tree)。
树中所有节点彼此之间都有关系。
XML DOM 结点树
XML DOM 把 XML文档 视为一种结构树。这种树结构被称为 节点树。
可通过这棵 树访问所有节点。可以修改或删除他们的内容,也可以创建新的元素。
这颗节点树展示了节点的集合,以及他们之间的联系。
这棵树从根节点开始,然后在__树的最底层级__向__文本节点__长出枝条。·

父、子和同级节点
节点树中的节点彼此之间都有等级关系。
父、子和同级节点用于描述这种关系。
父节点拥有子节点,位于相同层级上的子节点成为同级节点(兄弟或姐妹)。
·在节点树中,顶端的节点称为根节点。
·根节点之外的每个节点都是一个父节点。
·节点可以有任何数量的子节点。
·叶子是没有子节点的节点。
·同级节点是拥有相同父节点的节点。
因为XML数据是按照树的形式进行构造的,所以可以在不了解树的确切结构且不了解其中包含的数据类型的情况下,对其进行遍历。
parent Node 父节点
children Node 子节点
sibling Node 同级节点

解析 XML DOM
浏览器__内建了__读取和操作XML的__XML解析器。
浏览器的_________________________XML解析器__把__XML__转换为__javascript可存取的对象。

解析XML
所有现代浏览器都内建了用于读取和操作XML的XML解析器。
浏览器的XML解析器 把XML读入内存,并把它转换为可被Javascript访问的XML DOM对象。
微软IE的XML解析器与其他浏览器中的解析器是有差异的。
微软IE的XML解析器__支持对XML文件和XML字符串(文本)的加载,而其他浏览器使用单独的XML解析器。
所有的__XML解析器__都含有遍历XML树、访问、插入及删除节点的函数。

通过微软IE的XML解析器加载XML

编程接口
DOM把XML模拟为一系列节点接口。可通过Javascript或其他编程语言来访问节点。
对 DOM的编程接口 是通过一套标准的属性和方法来定义的。
属性经常按照“某事物是什么”的方式来使用(例如节点名是“book”)。
方法经常按照“某事物做什么”的方式来使用(例如删除“book”节点)。

XML DOM 属性
一些典型的DOM属性:
x.nodeName 获取x的名称
x.nodeValue 获取x的值
x.parentNodes 获取x的父节点
x.childNodes 获取x的子节点
x.attributes 获取x的属性节点
注释:在上面的列表中,x是一个节点对象。

XML DOM 方法
x.getElementsByTagName(name) 获取带有指定节点名称的所有元素
x.appendChild(node) 向x插入子节点
x.removeChild(node) 向x删除子节点
注释:在上面的列表中,x是一个节点对象。

实例:
从____books.xml中的<title>元素____获取文本_____的JavaScript代码:
text = xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
解释:
xmlDoc 有浏览器的XML解析器创建的XML DOM
getElementsByTagName("title")[0] 第一个title元素节点
childNode[0] <title>元素节点的第一个子节点(文本节点)
nodeValue 文本节点的值(文本自身)

在上面的例子中,getElementsByTagName是方法,而childNodes和nodeValue是属性。
为每个文本节点使用childNodes[0],即使每个元素只有一个文本节点。这是由于getElementByTagName()方法总是会返回数组。

XML DOM访问节点
通过DOM,您能够访问XML文档中的每个节点。
loadXMLDoc(),用于外部判断浏览器,在JavaScript中加载XML文件。
使用节点列表中的下标符号来访问节点
使用length属性来循环"books.xml"中的所有<title>元素节点。
查看元素的节点类型
nodeType属性 nodeName属性
使用___节点的关系___循环元素节点

访问节点
可以通过三种方式来访问节点:
1.通用使用getElementsByTagName()方法;
2.通过循环(遍历)结点树;
3.通过利用节点的关系在节点树中导航。

getElelmentsTagName()方法
getElementByTagName()返回拥有指定标签名的多有元素。
语法:node.getElementsByTagName("tagname");
实例:
下面的例子返回x元素下的所有<title>元素:
x.getElementByTagName("title");
注意:上面的例子返回x元素下的所有<title>元素;如果返回XML文档中的所有<title>元素,使用:
xmlDoc.getElementsByTagName("title");
在这里,xmlDoc 就是文档本身(文档节点);

XML文档的documentElement属性是根节点。
节点的nodeName属性是节点的名称;
节点的nodeType属性是节点的类型;

节点的属性
在XML文档对象模型(DOM)中,每个节点都是一个对象,并可通过Javascript进行访问和操作
三个重要的节点属性是:
.nodeName
.nodeValue
.nodeType

nodeName属性
nodeName属性规定节点的名称
nodeName是只读的
XMLDOM元素节点的nodeName与__HTML标签名__相同
属性节点的nodeName是属性的名称
文本节点的nodeName永远是#text
文档节点的nodeName永远是#document

nodeValue属性
nodeValue属性规定节点的值。
元素节点的nodeValue是undefined
文本节点的nodeValue是文本自身
属性节点的nodeValue是属性的值

nodeType属性
nodeType属性规定节点的类型
nodeType是只读的
最重要的节点类型是:
元素 1
属性 2
文本 3
注释 8
文档 9

XML DOM Node List
节点列表__由getElementByTagName()方法
和childNodes属性_______返回
DOM Node List
当使用诸如childNodes或getElementByTagName()属性或方法时,会返回NodeList对象。

Node List Length
NodeList对象会保持自身的更新。如果删除或添加了元素。列表会自动更新。
节点列表的length属性是列表中节点的数量。

DOM Attribute List(Named Node Map)
元素节点的attributes属性__返回__属性节点的列表。
这被称为Named Node Map,除了方法和属性上的一些差别之外,它与节点列表相似。
属性列表会保持自身的更新,如果删除或添加属性,这个列表会自动更新。
x.getNamedItem()返回属性节点。

XMLDOM 遍历 节点树
遍历(Traverse)意味着在节点树中进行循环或移动。

XML DOM 浏览器差异
不同的浏览器____在XML DOM中____处理____空文本节点的方式_______是不同的。
实例:
忽略节点的空文本:方法是检查节点的nodeType,且仅处理元素节点。

DOM解析中的浏览器差异
所有现代浏览器都支持W3C DOM规范。
不过,浏览器之间是有差异的。重要的区别有两点:
1.加载XML的方式;
2.处理空白和换行的方式。

DOM空白和换行
XML经常在节点之间含有换行或空白字符,

DOM空白和换行
XML经常在节点之间含有换行或空白字符,这是使用简单的编辑器(比如记事本)时经常出现的情况。
Firefox以及其他一些浏览器,会把空白或换行作为文本节点来处理,而IE不会这样。

XML DOM 定位节点
可通过使用__节点间的关系__对节点进行定位。
避免空的文本节点
Firefox以及其他一些浏览器,把空的空白或换行当作文本节点,而IE不会这么做。

XML DOM 获取节点值
nodeValue_____属性________获取文本节点的文本值
getAttribute("属性")方法__返回属性的值

获取元素的值
在DOM中,每种成分都是节点。元素节点没有文本值。
元素节点的文本储存在子节点中。该节点成被成为文本节点。
获取元素文本的方法,就是获取这个子节点(文本节点)的值。

获取元素值
getElementByTagName()方法__返回__包含拥有指定标签名的__所有元素的__节点列表。
获取属性的值
在DOM中,属性也是节点。与元素节点不同,属性节点拥有文本值。
获取属性的值的方法,酒店hi获取它的文本值。
可以通过使用getAttribute()方法或属性节点的nodeValue属性来完成这个任务。

改变属性的值
通过使用setAttribute()来改变属性
setAttribute()方法__设置已有属性的值或创建新属性。
xmlDoc = loadXMLDoc("books.xml");
x=xmlDoc.getElementByTagName("book");
x[0].setAttribute("category","child");

通过使用nodeValue改变属性
nodeValue属性也可以用于改改属性节点的值。
xmlDoc = loadXMLDoc("books.xml");
x = xmlDoc.getElementsByTagName("book")[0];
y = x.getAttributeNode("category");
y.nodeValue="child";

getAttribute(): 返回属性值,是一个字符串
getAttributeNode("属性名"):返回属性节点,是一个对象

replaceChild()方法替换指定节点
nodeValue属性替换文本节点中的文本

替换文本节点中的数据
replaceData()方法用于替换文本节点中的数据
replaceData()方法有三个参数:
offset 在何处开始替换字符,offset值以0开始
length 要替换多少字符
string 要插入的字符串

以上是关于XML DOM的主要内容,如果未能解决你的问题,请参考以下文章

xml.dom 二

XML —— DOM方式解析XML

XML DOM学习

2017/4/26-DOM解析XML文件

用DOM实现对XML文件的解析

用DOM实现对XML文件的解析