1.
解析 XML DOM
通过微软的 XML 解析器加载 XML
下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("books.xml");代码解释:
第一行创建空的微软 XML 文档对象
第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
第三行告知解析器加载名为 "books.xml" 的文档
下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(txt);
注释:loadXML() 方法用于加载字符串(文本),而 load() 用于加载文件。
在 Firefox 及其他浏览器中的 XML 解析器
下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器:
xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.async="false";
xmlDoc.load("books.xml");代码解释:
第一行创建空的 XML 文档对象
第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
第三行告知解析器加载名为 "books.xml" 的文档
下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");代码解释:
第一行创建一个空的 XML 文档对象
第二行告知解析器加载名为 txt 的字符串
注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。
2.
XML DOM 属性和方法
一些典型的 DOM 属性
x.nodeName - x 的名称
x.nodeValue - x 的值
x.parentNode - x 的父节点
x.childNodes - x 的子节点
x.attributes - x 的属性节点
XML DOM 方法
x.getElementsByTagName(name) - 获取带有指定标签名称的所有元素
x.appendChild(node) - 向 x 插入子节点
x.removeChild(node) - 从 x 删除子节点
例:
xmlDoc=loadXMLDoc("books.xml");
document.write(xmlDoc.getElementsByTagName("title")
[0].childNodes[0].nodeValue);
3.
XML DOM 节点信息
三个重要的 XML DOM 节点属性是:
nodeName 属性规定节点的名称。
nodeValue 属性规定节点的值。
nodeType 属性规定节点的类型。
4.
节点列表:
当使用如childNodes或getElementsByTagName()属性或方法时,会返回 NodeList 对象。
NodeList 对象表示节点的列表,
Node List.Length属性是列表中节点的数量。
node.attributes 属性返回属性节点的列表。
5.
定位 DOM 节点
节点的关系被定义为节点的属性:
parentNode --父节点
childNodes --子节点
firstChild --第一个子节点
lastChild --最后一个子节点
nextSibling --兄弟节点
previousSibling --当前结点的前一个结点
在DOM中,元素节点的文本存储在子节点中。该节点称为文本节点。
获取元素文本的方法,就是获取这个子节点(文本节点)的值。
6.
XML DOM 获取节点值
nodeValue 属性用于获取节点的文本值。
getAttribute() 方法返回属性的值。
获取元素的值
x=xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue; 属性返回文本节点的文本值:
获取属性的值
txt=xmlDoc.getElementsByTagName("title")[0].getAttribute("lang").nodeValue;结果:txt = "en"
7.
XML DOM 改变节点值
nodeValue 属性用于改变节点值。
setAttribute() 方法用于改变属性的值。
改变元素的值
loadXMLDoc("books.xml").getElementsByTagName("title")[0].childNodes[0].nodeValue="Hello World";
改变属性的值
loadXMLDoc("books.xml").getElementsByTagName('book')[0].setAttribute("category","child");
8.
XML DOM 删除节点
removeChild() 方法删除指定节点。
removeAttribute() 方法删除指定属性。
删除元素节点
xmlDoc.documentElement.removeChild(x);
x.parentNode.removeChild(x);
注释:x是获取元素名:x=xmlDoc.getElementsByTagName("title")[0];
删除文本节点
x=xmlDoc.getElementsByTagName("title")[0];
y=x.childNodes[0];
x.removeChild(y);
删除属性节点
xmlDoc.getElementsByTagName("book")[0].removeAttribute("category");
9.
XML DOM 替换节点
replaceChild() 方法替换指定节点。
nodeValue 属性替换文本节点中的文本。
10.
XML DOM创建节点
createElement() --创建元素节点,并使用 appendChild()把它添加到一个节点。
createAttribute() --创建新的属性节点,并使用 setAttributeNode()把该节点插入一个元素中。
setAttribute() --为元素创建一个新的属性。
createTextNode() --创建新的文本节点,并使用 appendChild()把该文本节点添加到一个元素中。
createCDATAsection() --创建 CDATA section 节点,并使用 appendChild() 把它添加到元素中。
createComment() --创建一个 comment 节点,并使用 appendChild() 把它添加到一个元素中。
例:
xmlDoc=loadXMLDoc("books.xml");
var x=xmlDoc.getElementsByTagName("book")[0];
newel=xmlDoc.createElement("edition");创建元素节点
x.appendChild(newel);
newatt=xmlDoc.createAttribute("edition");创建新的属性节点
newatt.nodeValue="first";
x.setAttributeNode(newatt);
x.setAttribute("edition","first");为元素创建一个新的属性
11.
XML DOM 添加节点
appendChild() 方法向一个存在的节点添加一个子节点。
insertBefore() 方法在一个指定的子节点之前插入一个节点。
setAttribute() 方法添加一个新的属性。
insertData() 把数据插入一个已存在的文本节点中。
例:
向文本节点添加文本
insertData(offset,string) 方法有两个参数:
offset - 在何处开始插入字符(以 0 开始)
string - 要插入的字符串
x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
x.insertData(0,"Hello ");
12.
XML DOM 克隆节点
cloneNode() 方法创建指定节点的副本。
cloneNode() 方法有一个参数(true 或 false)该参数指示被复制的节点是否包括原节点的所有属性和子节点。
例:
oldNode=xmlDoc.getElementsByTagName('book')[0];
newNode=oldNode.cloneNode(true);
xmlDoc.documentElement.appendChild(newNode);