旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

猖獗XML进修笔记(13)---------XML DOM【XML教程】,XML,学习笔记,DOM

作者:搜教程发布时间:2019-11-27分类:XML教程浏览:46评论:0


导读:XML文档对象模子定义接见和操纵XML文档的规范要领。DOM将XML文档作为一个树形组织,而树叶被定义为节点。什么是XMLDOM?XMLDOM...
XML 文档对象模子定义接见和操纵XML文档的规范要领。

DOM 将 XML 文档作为一个树形组织,而树叶被定义为节点。

什么是 XML DOM?

XML DOM 是:

  • 用于 XML 的规范对象模子

  • 用于 XML 的规范编程接口

  • 中立于平台和言语

  • W3C 的规范

XML DOM 定义了一切 XML 元素的对象和属性,以及接见它们的要领(接口)

换句话说:

XML DOM 是用于猎取、变动、增加或删除 XML 元素的规范。

XML DOM 节点


XML 文档中的每一个身分都是一个节点。

节点

依据 DOM,XML 文档中的每一个身分都是一个节点

DOM 是如许划定的:

  • 全部文档是一个文档节点

  • 每一个 XML 标签是一个元素节点

  • 包括在 XML 元素中的文本是文本节点

  • 每一个 XML 属性是一个属性节点

  • 诠释属于诠释节点

DOM 实例

请看下面的 XML 文件 (books.xml):

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="children">
  <title lang="en">Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>

<book category="cooking">
  <title lang="en">Everyday Italian</title> 
  <author>Giada De Laurentiis</author> 
  <year>2005</year> 
  <price>30.00</price> 
</book>

<book category="web">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>

<book category="web">
  <title lang="en">XQuery Kick Start</title> 
  <author>James McGovern</author> 
  <author>Per Bothner</author> 
  <author>Kurt Cagle</author> 
  <author>James Linn</author> 
  <author>Vaidyanathan Nagarajan</author> 
  <year>2003</year> 
  <price>49.99</price> 
</book>

</bookstore>

在上面的 XML 中,根节点是 <bookstore>。文档中的一切其他节点都被包括在 <bookstore> 中。

根节点 <bookstore> 有四个 <book> 节点。

第一个 <book> 节点有四个节点:<title>, <author>, <year> 以及 <price>,个中每一个节点都包括一个文本节点,"Harry Potter", "J K. Rowling", "2005" 以及 "29.99"。

文本老是存储在文本节点中

在 DOM 处置惩罚中一个广泛的毛病是,以为元素节点包括文本。

不过,元素节点的文本是存储在文本节点中的。

在这个例子中:<year>2005</year>,元素节点 <year>,具有一个值为 "2005" 的文本节点。

"2005" 不是 <year> 元素的值!

XML DOM 节点树


XML DOM 把 XML DOM 文档视为一棵节点树 (node-tree)。

树中的一切节点彼此之间都有关联。

XML DOM 节点树

XML DOM 把 XML 文档视为一种树组织。这类树组织被称为节点树

可经由历程这棵树接见一切节点。可以修正或删除它们的内容,也可以建立新的元素。

这颗节点树展现了节点的鸠合,以及它们之间的联络。这棵树从根节点最先,然后在树的最低层级向文本节点长出枝条:

上面的图片示意 XML 文件 books.xml

父、子和同级节点

节点树中的节点彼此之间都有品级关联。

父、子和同级节点用于形貌这类关联。父节点具有子节点,位于雷同层级上的子节点称为同级节点(兄弟或姐妹)。

  • 在节点树中,顶端的节点成为根节点

  • 根节点之外的每一个节点都有一个父节点

  • 节点可以有任何数量的子节点

  • 叶子是没有子节点的节点

  • 同级节点是具有雷同父节点的节点

下面的图片展现出节点树的一个部份,以及节点间的关联:

因为 XML 数据是根据树的情势举行组织的,所以可以在不相识树的确实组织且不相识个中包括的数据范例的情况下,对其举行遍历。

您将在本教程稍后的章节进修更多有关遍历节点树的学问。

诠释:父节点:Parent Node,子节点:Children Node,同级节点:Sibling Node。

第一个子节点 - 末了一个子节点

请看下面的 XML 片断:

<bookstore>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title> 
    <author>J K. Rowling</author> 
    <year>2005</year> 
    <price>29.99</price> 
  </book>
</bookstore>

在上面的 XML 中,<title> 元素是 <book> 元素的第一个子节点,而 <price> 元素是 <book> 元素的末了一个子节点。

另外,<book> 元素是 <title>、<author>、<year> 以及 <price> 元素的父节点。

剖析 XML DOM

剖析 XML

一切当代浏览器都内建了用于读取和操纵 XML 的 XML 剖析器。

剖析器把 XML 读入内存,并把它转换为可被 JavaScript 接见的 XML DOM 对象。

微软的 XML 剖析器与其他浏览器中的剖析器是有差异的。微软的剖析器支撑对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器运用零丁的剖析器。不过,一切的剖析器都含有遍历 XML 树、接见、插进去及删除节点的函数。

在本教程中,我们将为您解说怎样建立可在 IE 及其他浏览器中运转的剧本。

经由历程微软的 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" 的文档

下面的 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 对象。

剖析 XML 文件 - 一个跨浏览器的实例

下面的例子把 XML 文档 ("books.xml") 载入 XML 剖析器:

<html>
<body>
<script type="text/javascript">
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e) {alert(e.message)}
  }
try 
  {
  xmlDoc.async=false;
  xmlDoc.load("books.xml");
  document.write("xmlDoc is loaded, ready for use");
  }
catch(e) {alert(e.message)}
</script>
</body>
</html>

Error: Access Across Domains

出于平安方面的缘由,当代的浏览器不允许跨域的接见。

这意味着,网页以及它试图加载的 XML 文件,都必需位于雷同的服务器上。

W3School 的实例所翻开的 XML 文件位于 W3School 的域上。

假如你打算在自身的网页上运用上面的例子,则必需把 XML 文件放到自身的服务器上。不然,xmlDoc.load() 将发生毛病 "Access is denied"。

剖析 XML 字符串 - 一个跨浏览器的实例

下面的代码加载并剖析了一个 XML 字符串:

<html>
<body>
<script type="text/javascript">
text="<bookstore>"
text=text+"<book>";
text=text+"<title>Harry Potter</title>";
text=text+"<author>J K. Rowling</author>";
text=text+"<year>2005</year>";
text=text+"</book>";
text=text+"</bookstore>";

try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async="false";
  xmlDoc.loadXML(text);
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    parser=new DOMParser();
    xmlDoc=parser.parseFromString(text,"text/xml");
    }
  catch(e) {alert(e.message)}
  }
document.write("xmlDoc is loaded, ready for use");
</script>
</body>
</html>

XML DOM 加载函数

加载函数

XML DOM 含有遍历 XML 树以及接见、插进去、删除节点的要领(函数)。

然后,在接见并处置惩罚 XML 文档之前,必需把它载入 XML DOM 对象。

上一节演示了怎样加载 XML 文档。为了防止因加载文档而反复编写代码,可以把代码存储在一个零丁的 JavaScript 文件中:

function loadXMLDoc(dname) 
{
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e) {alert(e.message)}
  }
try 
  {
  xmlDoc.async=false;
  xmlDoc.load(dname);
  return(xmlDoc);
  }
catch(e) {alert(e.message)}
return(null);
}

上面的函数存储在名为 "loadxmldoc.js" 的文件中。

下面的例子在其 <head> 部份有一个指向 "loadxmldoc.js" 的链接,并运用 loadXMLDoc() 函数加载 XML 文档 ("books.xml"):

<html>
<head><script type="text/javascript" src="loadxmldoc.js"></script>
</head>

<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("books.xml");
document.write("xmlDoc is loaded, ready for use");
</script>
</body>
</html>

XML DOM - 属性和要领

编程接口

DOM 把 XML 模拟为一系列节点接口。可经由历程 JavaScript 或其他编程言语来接见节点。在本教程中,我们运用 JavaScript。

对 DOM 的编程接口是经由历程一套规范的属性和要领来定义的。

属性常常根据“某事物是什么”的体式格局来运用(比方节点名是 "book")。

要领常常根据“对某事物做什么”的体式格局来运用(比方删除 "book" 节点)。

XML DOM 属性

一些典范的 DOM 属性:

  • x.nodeName - x 的称号

  • x.nodeValue - x 的值

  • x.parentNode - 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 代码:

txt=xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue

在此语句实行后,txt 保留的值是 "Everyday Italian"。

诠释:

  • xmlDoc - 由剖析器建立的 XML DOM

  • getElementsByTagName("title")[0] - 第一个 <title> 元素

  • childNodes[0] - <title> 元素的第一个子节点 (文本节点)

  • nodeValue - 节点的值 (文本自身)

在上面的例子中,getElementsByTagName 是要领,而 childNodes 和 nodeValue 是属性。

剖析 XML 文件 - 跨浏览器实例

下面的代码片断运用 loadXMLDoc 函数把 books.xml 载入 XML 剖析器中,并显现第一个 book 的数据:

xmlDoc=loadXMLDoc("books.xml");

document.write(xmlDoc.getElementsByTagName("title")
[0].childNodes[0].nodeValue);
document.write("<br />");
document.write(xmlDoc.getElementsByTagName("author")
[0].childNodes[0].nodeValue);
document.write("<br />");
document.write(xmlDoc.getElementsByTagName("year")
[0].childNodes[0].nodeValue);

输出:

Harry Potter
J K. Rowling
2005

在上面的例子中,我们为每一个文本节点运用 childNodes[0],纵然每一个元素只要一个文本节点。这是因为 getElementsByTagName() 要领老是会返回数组。

剖析 XML 字符串 - 跨浏览器实例

下面的代码加载并剖析一个 XML 字符串:

下面的代码片断运用 loadXMLString 函数把 books.xml 载入 XML 剖析器,并显现第一个 book 的数据:

text="<bookstore>"
text=text+"<book>";
text=text+"<title>Harry Potter</title>";
text=text+"<author>J K. Rowling</author>";
text=text+"<year>2005</year>";
text=text+"</book>";
text=text+"</bookstore>";

xmlDoc=loadXMLString(text);

document.write(xmlDoc.getElementsByTagName("title")
[0].childNodes[0].nodeValue);
document.write("<br />");
document.write(xmlDoc.getElementsByTagName("author")
[0].childNodes[0].nodeValue);
document.write("<br />");
document.write(xmlDoc.getElementsByTagName("year")
[0].childNodes[0].nodeValue);

输出:

Harry Potter
J K. Rowling
2005

接见节点

您可以经由历程三种要领来接见节点:

  1. 经由历程运用 getElementsByTagName() 要领

  2. 经由历程轮回(遍历)节点树

  3. 经由历程应用节点的关联在节点树中导航

getElementsByTagName() 要领

getElementsByTagName() 返回具有指定标署名的一切元素。

语法

node.getElementsByTagName("tagname");

实例

下面的例子返回 x 元素下的一切 <title> 元素:

x.getElementsByTagName("title");

请注意,上面的例子仅返回 x 节点下的 <title> 元素。要返回 XML 文档中的一切 <title> 元素,请运用:

xmlDoc.getElementsByTagName("title");

在这里,xmlDoc 就是文档自身(文档节点)。

DOM Node List

getElementsByTagName() 要领返回节点列表 (node list)。节点列表是节点的数组。

下面的代码经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中,然后在变量 x 中存储 <title> 节点的一个列表:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title");

可经由历程下标接见 x 中的 <title> 元素。要接见第三个 <title>,您可以编写:

y=x[2];

诠释:下标以 0 肇端。

在本教程中稍后的章节,您将学到更多有关 Node List 的学问。

DOM Node List Length

length 属性定义节点列表的长度(即节点的数量)。

您可以经由历程运用 length 属性来轮回一个节点列表:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title");

for (i=0;i<x.length;i++)
  { 
  document.write(x[i].childNodes[0].nodeValue);
  document.write("<br />");
  }

例子诠释:

  1. 运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc

  2. 取得一切 <title> 元素节点

  3. 输出每一个 <title> 元素的文本节点的值

Node Type

XML 文档的 documentElement 属性是根节点。

节点的 nodeName 属性是节点的称号。

节点的 nodeType 属性是节点的范例。

您将在本教程的下一节中进修更多有关节点属性的学问。

遍历节点

下面的代码轮回根节点的子节点,同时也是元素节点:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.documentElement.childNodes;

for (i=0;i<x.length;i++)
{ 
  if (x[i].nodeType==1)
  {//Process only element nodes (type 1) 
  document.write(x[i].nodeName);
  document.write("<br />");
  } 
}

例子诠释:

  1. 经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中

  2. 取得根元素的子节点

  3. 搜检每一个子节点的节点范例。假如节点范例是 "1",则是元素节点

  4. 假如是元素节点,则输出节点的称号

应用节点的关联举行导航

下面的代码经由历程应用节点的关联在节点树中举行导航:

xmlDoc=loadXMLDoc("books.xml");

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

for (i=0;i<x.length;i++)
{
if (y.nodeType==1)
  {//Process only element nodes (type 1)
  document.write(y.nodeName + "<br />");
  }
y=y.nextSibling;
}
  1. 经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中

  2. 取得第一个 book 元素的子节点

  3. 把 "y" 变量设置为第一个 book 元素的第一个子节点

  4. 搜检每一个子节点的节点范例,假如节点范例是 "1",则是元素节点

  5. 假如是元素节点,则输出该节点的称号

  6. 把 "y" 变量设置为下一个同级节点,并再次运转轮回

节点的属性

在 XML 文档对象模子 (DOM) 中,每一个节点都是一个对象

对象具有要领(功用)和属性(关于对象的信息),并可经由历程 JavaScript 举行接见和操纵。

三个主要的 XML DOM 节点属性是:

  • nodeName

  • nodeValue

  • nodeType

nodeName 属性

nodeName 属性划定节点的称号。

  • nodeName 是只读的

  • 元素节点的 nodeName 与标署名雷同

  • 属性节点的 nodeName 是属性的称号

  • 文本节点的 nodeName 永远是 #text

  • 文档节点的 nodeName 永远是 #document

nodeValue 属性

nodeValue 属性划定节点的值。

  • 元素节点的 nodeValue 是 undefined

  • 文本节点的 nodeValue 是文本自身

  • 属性节点的 nodeValue 是属性的值

例子 1:猎取元素的值

下面的代码检索第一个 <title> 元素的文本节点的值:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
txt=x.nodeValue;

效果:txt = "Everyday Italian"

代码诠释:

  • 经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中

  • 猎取第一个 <title> 元素节点的文本节点

  • 把 txt 变量设置为文本节点的值

例子 2:变动元素的值

下面的代码变动第一个 <title> 元素的文本节点的值:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
x.nodeValue="Easy Cooking";

代码诠释:

  • 经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中

  • 猎取第一个 <title> 元素节点的文本节点

  • 把文本节点的值变动为 "Easy Cooking"

nodeType 属性

nodeType 属性划定节点的范例。

nodeType 是只读的。

最主要的节点范例是:

元素范例 节点范例
元素 1
属性 2
文本 3
诠释 8
文档 9

DOM Node List

当运用诸如 childNodes 或 getElementsByTagName() 属性或要领时,会返回 NodeList 对象。

NodeList 对象示意节点的列表,以 XML 中的雷同递次。

运用从 0 最先的下标来接见节点列表中的节点。

下面的图象示意 "books.xml" 中 <title> 元素的节点列表:

下面的代码片断经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中,并返回 "books.xml" 中 title 元素的一个节点列表:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title");

以上语句实行以后,x 成为一个 NodeList 对象。

下面的代码片断从节点列表 x 中的第一个 <title> 元素中返回文本:

txt=x[0].childNodes[0].nodeValue;

在以上语句实行以后,txt = "Everyday Italian"。

Node List Length

NodeList 对象会坚持自身的更新。假如删除或增加了元素,列表会自动更新。

节点列表的 length 属性是列表中节点的数量。

下面的代码片断经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc,并返回 "books.xml" 中 <title> 元素的数量:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName('title').length;

在上面的语句实行以后,x = 4。

节点列表的长度可用于轮回列表中一切的元素。

下面的代码片断运用 length 属性来遍历 <title> 元素的列表:

xmlDoc=loadXMLDoc("books.xml");

//the x variable will hold a node list
x=xmlDoc.getElementsByTagName('title');

for (i=0;i<x.length;i++)
{
document.write(x[i].childNodes[0].nodeValue);
document.write("<br />");
}

输出:

Harry Potter
Everyday Italian
XQuery Kick Start
Learning XML

例子诠释:

  • 经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc

  • 设置保留一切 title 元素的节点列表的 x 变量

  • 从一切 <title> 元素的文本节点输出值

DOM Attribute List (Named Node Map)

元素节点的 attributes 属性返回属性节点的列表。

这被称为 Named Node Map,除了要领和属性上的一些差异之外,它与节点列表类似。

属性列表会坚持自身的更新。假如删除或增加属性,这个列表会自动更新。

下面的代码片断经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中,并从 "books.xml" 中的第一个 <book> 元素返回属性节点的一个列表:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName('book')[0].attributes;

以上代码实行以后,x.length 即是属性的数量,可运用 x.getNamedItem() 返回属性节点。

下面的代码片断一个 book 的 "category" 属性的值,以及其属性的数量:

xmlDoc=loadXMLDoc("books.xml");

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

document.write(x.getNamedItem("category").nodeValue);
document.write("<br />" + x.length);

输出:

children
1

例子诠释:

  • 经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中

  • 把 x 变量设置为第一个 <book> 元素的一切属性的一个列表

  • 从 "category" 属性输出其值

  • 输出属性列表的长度

XML DOM 遍历节点树


遍历 (Traverse) 意味着在节点树中举行轮回或挪动。

实例

下面的例子运用 XML 文件 books.xml

函数 loadXMLString(),位于外部 JavaScript 中,用于加载 XML 文件。

  • 遍历一棵节点树

  • 轮回 <book> 元素的一切子节点。

遍历节点树

您常常须要轮回 XML 文档,比方:当你须要提取每一个元素的值时。

这个历程叫作“遍历节点树”。

下面的例子轮回 <book> 的一切子节点,并显现它们的称号和值:

<html>
<head>
<script type="text/javascript" src="loadxmlstring.js"></script>
</head>
<body>
<script type="text/javascript">
text="<book>";
text=text+"<title>Harry Potter</title>";
text=text+"<author>J K. Rowling</author>";
text=text+"<year>2005</year>";
text=text+"</book>";

xmlDoc=loadXMLString(text);

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

输出:

title: Harry Potter
author: J K. Rowling
year: 2005

例子诠释:

  • loadXMLString() 把 XML 字符串载入 xmlDoc 中

  • 猎取根元素的子节点

  • 输出每一个子节点的称号,以及文本节点的节点值

定位 DOM 节点

经由历程节点间的关联接见节点树中的节点,一般称为定位节点 ("navigating nodes")。

在 XML DOM 中,节点的关联被定义为节点的属性:

  • parentNode

  • childNodes

  • firstChild

  • lastChild

  • nextSibling

  • previousSibling

下面的图象展现了 books.xml 中节点树的一个部份,并说清楚明了节点之间的关联:

DOM - 父节点

一切的节点都唯一一个父节点。下面的代码定位到 <book> 的父节点:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("book")[0];
document.write(x.parentNode.nodeName);

例子诠释:

  • 经由历程运用 loadXMLDoc() 把 "books.xml" 载入到 xmlDoc 中

  • 猎取第一个 <book> 元素

  • 输出 "x" 的父节点的节点名

TIY

防止空的文本节点

Firefox,以及其他一些浏览器,把空的空缺或换行看成文本节点,而 IE 不会这么做。

这会在运用以下属性使发生一个题目:firstChild、lastChild、nextSibling、previousSibling。

为了防止定位到空的文本节点(元素节点之间的空格和换行标记),我们运用一个函数来搜检节点的范例:

function get_nextSibling(n)
{
y=n.nextSibling;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}

有了上面的函数,我们就可以运用 get_nextSibling(node) 来替代 node.nextSibling 属性。

代码诠释:


元素节点的范例是 1。假如同级节点不是元素节点,就挪动到下一个节点,直到找到元素节点为止。经由历程这个方法,在 IE 和 Firefox 中,都可以获得雷同的效果。

猎取第一个元素

下面的代码显现第一个 <book> 的第一个元素节点:

<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
<script type="text/javascript">
//check if the first node is an element node
function get_firstChild(n)
{
y=n.firstChild;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}
</script>
</head>

<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("books.xml");

x=get_firstChild(xmlDoc.getElementsByTagName("book")[0]);
document.write(x.nodeName);
</script>
</body>
</html>

输出:

title

例子诠释:

  • 经由历程运用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中

  • 在第一个 <book> 上运用 get_firstChild 函数,来猎取元素节点中的第一个子节点

  • 输出第一个子节点(属于元素节点)的节点名

以上就是猖獗XML进修笔记(13)---------XML DOM的内容,更多相关内容请关注ki4网(www.ki4.cn)!

标签:XML学习笔记DOM


欢迎 发表评论: