javascript操作XMLaaa.docx

上传人:b****5 文档编号:6238165 上传时间:2023-01-04 格式:DOCX 页数:9 大小:22.87KB
下载 相关 举报
javascript操作XMLaaa.docx_第1页
第1页 / 共9页
javascript操作XMLaaa.docx_第2页
第2页 / 共9页
javascript操作XMLaaa.docx_第3页
第3页 / 共9页
javascript操作XMLaaa.docx_第4页
第4页 / 共9页
javascript操作XMLaaa.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

javascript操作XMLaaa.docx

《javascript操作XMLaaa.docx》由会员分享,可在线阅读,更多相关《javascript操作XMLaaa.docx(9页珍藏版)》请在冰豆网上搜索。

javascript操作XMLaaa.docx

javascript操作XMLaaa

JavaScript操作XML

(一)

JavaScript操作XML是通过XMLDOM来完成的。

那么什么是XMLDOM呢?

XMLDOM是:

∙用于XML的标准对象模型

∙用于XML的标准编程接口

∙中立于平台和语言

∙W3C的标准

XMLDOM定义了所有XML元素的对象和属性,以及访问它们的方法(接口)。

也就是说:

XMLDOM是用于查询、添加、修改、删除XML元素的标准。

在继续之前,我们先来了解一下XML的定义。

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

xmlversion="1.0"encoding="utf-8"?

>

  EverydayItalian

  GiadaDeLaurentiis

  2005

  30.00

  HarryPotter

  JK.Rowling

  2005

  29.99

  XQueryKickStart

  JamesMcGovern

  PerBothner

  KurtCagle

  JamesLinn

  VaidyanathanNagarajan

  2003

  49.99

  LearningXML

  ErikT.Ray

  2003

  39.95

在上面的XML中,根节点是

文档中的所有其他节点都被包含在中。

根节点有四个节点。

第一个节点有四个节点:

,<author>,<year>以及<price>,其中每个节点都包含一个文本节点,"EverydayItalian","GiadaDeLaurentiis","2005"以及"30.00"。</p><p>XML文档中的每个成分都是一个节点。</p><p>节点根据DOM,XML文档中的每个成分都是一个节点。</p><p>DOM是这样规定的:</p><p>∙整个文档是一个文档节点</p><p>∙每个XML标签是一个元素节点</p><p>∙包含在XML元素中的文本是文本节点</p><p>∙每一个XML属性是一个属性节点</p><p>∙注释属于注释节点</p><p>文本总是存储在文本节点中在DOM处理中一个普遍的错误是,认为元素节点包含文本。</p><p>不过,元素节点的文本是存储在文本节点中的。</p><p>在这个例子中:</p><p><year>2005</year>,元素节点<year>,拥有一个值为"2005"的文本节点。</p><p>2005"不是<year>元素的值!</p><p>XMLDOM把XMLDOM文档视为一棵节点树(node-tree)。</p><p>树中的所有节点彼此之间都有关系。</p><p>XMLDOM节点树XMLDOM把XML文档视为一种树结构。</p><p>这种树结构被称为节点树。</p><p>可通过这棵树访问所有节点。</p><p>可以修改或删除它们的内容,也可以创建新的元素。</p><p>这颗节点树展示了节点的集合,以及它们之间的联系。</p><p>这棵树从根节点开始,然后在树的最低层级向文本节点长出枝条:</p><p>父、子和兄弟节点节点树中的节点彼此之间都有等级关系。</p><p>父、子和兄弟节点用于描述这种关系。</p><p>父节点拥有子节点,位于相同层级上的子节点称为兄弟节点。</p><p>∙在节点树中,顶端的节点成为根节点</p><p>∙根节点之外的每个节点都有一个父节点</p><p>∙节点可以有任何数量的子节点</p><p>∙叶子是没有子节点的节点</p><p>∙兄弟节点是拥有相同父节点的节点</p><p>在上面的XML中,<title>元素是<book>元素的第一个子节点,而<price>元素是<book>元素的最后一个子节点。</p><p>此外,<book>元素是<title>、<author>、<year>以及<price>元素的父节点。</p><p>Note:</p><p>父节点:</p><p>ParentNode,子节点:</p><p>ChildrenNode,同级节点:</p><p>SiblingNode</p><p>本文出自51CTO.COM技术博客</p><p>JavaScript操作XML</p><p>(二)</p><p>这一篇介绍浏览器内建的XML解析器以及JavaScript是如何加载XML的。</p><p>大多数浏览器都有读取和操作XML的内建XML解析器。</p><p>解析器(XMLParser)把XML转换为JavaScript可访问的对象。</p><p>解析器把XML载入内存,然后把它转换为可通过JavaScript访问的XMLDOM对象。</p><p>微软的XML解析器与其他浏览器中的解析器之间,存在一些差异。</p><p>微软的解析器支持XML文件和XML字符串(文本)的加载,而其他浏览器使用单独的解析器。</p><p>不过,所有的解析器都包含遍历XML树、访问插入及删除节点(元素)及其属性的函数。</p><p>Note:</p><p>当我们谈及XML解析,我们常常会使用有关XML元素的术语:</p><p>节点。</p><p>一、IE通过微软的XML解析器来加载XML</p><p>微软的XML解析器内建于InternetExplorer5以及更高的版本中。</p><p>下面的JavaScript片段把一个XML文档载入解析器中:</p><p>varxmlDoc=newActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.load("note.xml");例子解释:</p><p>1.上面代码的第一个行创建一个空的微软XML文档对象。</p><p>2.第二行关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行。</p><p>3.第三行告知解析器加载名为"note.xml"的XML文档。</p><p>下面的JavaScript片段把字符串txt载入解析器:</p><p>varxmlDoc=newActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(txt);注释:</p><p>loadXML()方法用于加载字符串(文本),load()用于加载文件。</p><p>二、Firefox及其他浏览器中的XML解析器下面的JavaScript片段把XML文档("note.xml")载入解析器:</p><p>varxmlDoc=document.implementation.createDocument("","",null);xmlDoc.async="false";xmlDoc.load("note.xml");例子解释:</p><p>1.上面代码的第一个行创建一个空的XML文档对象。</p><p>2.第二行关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行。</p><p>3.第三行告知解析器加载名为"note.xml"的XML文档。</p><p>下面的JavaScript片段把字符串txt载入解析器:</p><p>varparser=newDOMParser();varxmlDoc=parser.parseFromString(txt,"text/xml");例子解释:</p><p>1.上面代码的第一个行创建一个空的微软XML文档对象。</p><p>2.第二行告知解析器载入名为txt的字符串。</p><p>注释:</p><p>DOMParser对象的parseFromString()方法用于加载字符串(文本),load()用于加载文件。</p><p>三、跨域访问出于安全方面的原因,现代的浏览器不允许跨域的访问。</p><p>假如你打算在自己的网页上使用上面的例子,则必须把XML文件放到自己的服务器上。</p><p>否则,xmlDoc.load()将产生错误"Accessisdenied"。</p><p>JavaScript操作XML(三)</p><p>上一篇介绍了XML如何加载到JavaScript解析器。</p><p>这一篇介绍加载到解析器后,JavaScript是如何访问节点的。</p><p>在详细介绍如何使用上面的方法前,我们先来了解下节点的主要属性。</p><p>documentElement属性:</p><p>XML文档的根节点。</p><p>nodeName属性:</p><p>节点的名称(只读)。</p><p>nodeValue属性:</p><p>节点的值。</p><p>nodeType属性:</p><p>节点的类型。</p><p>childNodes属性:</p><p>返回子节点集合。</p><p>parentNode属性:</p><p>返回父节点。</p><p>firstChild属性:</p><p>返回第一个子节点。</p><p>lastChild属性:</p><p>返回最后一个子节点。</p><p>nextSibling属性:</p><p>返回下一个兄弟(同级)节点。</p><p>previousSibling属性:</p><p>返回前一个兄弟(同级)节点。</p><p>nodeName属性nodeName属性规定节点的名称。</p><p>∙nodeName是只读的</p><p>∙元素节点的nodeName与标签名相同</p><p>∙属性节点的nodeName是属性的名称</p><p>∙文本节点的nodeName永远是#text</p><p>∙文档节点的nodeName永远是#document</p><p>nodeValue属性nodeValue属性规定节点的值。</p><p>∙元素节点的nodeValue是undefined</p><p>∙文本节点的nodeValue是文本自身</p><p>∙属性节点的nodeValue是属性的值</p><p>nodeType属性nodeType属性规定节点的类型。</p><p>nodeType是只读的。</p><p>最重要的节点类型是:</p><p>元素类型</p><p>节点类型</p><p>元素</p><p>1</p><p>属性</p><p>2</p><p>文本</p><p>3</p><p>注释</p><p>8</p><p>文档</p><p>9</p><p>您可以通过四种方法来访问节点:</p><p>1、通过getElementsById()方法。</p><p>    用法:</p><p>varxNode=xmlDoc.getElementsById('ID');</p><p>    解释:</p><p>这个方法我想大家已经很熟悉了。</p><p>就是如果XML里有个id='ID'的Node,那个就返回这个Node节点,否则返回null。</p><p>    在得到这个Node后,就可以用上面的属性进行访问了。</p><p>    ps:</p><p>xmlDoc的定义可以在上一篇文章中找到。</p><p>2、通过getElementsByTagName()方法。</p><p>    用法:</p><p>vararrNodes=xmlDoc.getElementsByTagName('TagName');</p><p>    解释:</p><p>这个方法是根据tagname返回一个数组。</p><p>此方法最常用。</p><p>    例子1:</p><p>    //xml内容:</p><p>JavaScript操作XML</p><p>(一)</p><p>    vararrNodes=xmlDoc.getElementsByTagName("title");</p><p>  for(i=0;i<arrNodes.length;i++)</p><p>    {</p><p>    alert(arrNodes.childNodes[0].nodeValue);</p><p>  }</p><p>例子2:</p><p>    //获取第一个<title>元素节点的文本节点。</p><p>注意,元素内的文本是元素的子节点,叫文本节点。</p><p>    varxNode=xmlDoc.getElementsByTagName("title")[0].childNodes[0];</p><p>    alert(xNode.nodeValue);//文本节点的值。</p><p>output"EverydayItalian"</p><p>3、通过循环(遍历)节点树。</p><p>    这个方法没什么好说的,就是用for循环结合childNodes遍历所以的节点。</p><p>例子:</p><p>x=xmlDoc.documentElement.childNodes;</p><p>for(i=0;i<x.length;i++)//只遍历了一层</p><p>{</p><p>document.write(x.nodeName);</p><p>document.write("<br/>");</p><p>}</p><p>4、通过节点的关系在节点树中导航。</p><p>    这个方法是根据当前节点得到parentNode、firstChild、lastChild、nextSibling、previousSibling来移动。</p><p>x=xmlDoc.getElementsByTagName("book")[0].childNodes;</p><p>y=xmlDoc.getElementsByTagName("book")[0].firstChild;</p><p>for(i=0;i<x.length;i++)</p><p>{</p><p>document.write(y.nodeName+"<br/>");</p><p>  y=y.nextSibling;</p><p>}</p><p> </p><p>JavaScript操作XML(四)</p><p>上一篇介绍了JavaScript主要是通过什么方法来访问节点的。</p><p>这一篇介绍JavaScript是如何操作节点的(包括增、删、改、查)。</p><p>通过前面的介绍,我们知道XML文档中,主要是元素节点、属性节点和文本节点。</p><p>下面详细介绍JavaScript是如何操作它们的。</p><p>元素节点:</p><p>查找:</p><p>上一篇已介绍。</p><p>主要是通过方法getElementsByTagName来查找定位。</p><p>例子:</p><p>//输出所有的titles</p><p>vart=xmlDoc.getElementsByTagName("title");</p><p>for(i=0;i<t.length;i++)</p><p>{</p><p>document.write(t.childNodes[0].nodeValue);</p><p>document.write("<br/>");</p><p>}</p><p>添加:</p><p>主要是用createElement创建元素,然后用appendChild附加子节点的形式实现。</p><p>例子:</p><p>varnewNode=xmlDoc.createElement("NewElementName");//创建元素节点</p><p>varnodeBook=xmlDoc.getElementsByTagName("book")[0];//找到节点book</p><p>nodeBook.appendChild(newNode);//把newNode作为子节点追加到父节点book的子节点后面。</p><p>也就是说,要追加节点,必须先找到父节点。</p><p>另外,还可以通过克隆的方式添加节点。</p><p>cloneNode()方法有一个参数(true或false)。</p><p>该参数指示被复制的节点是否包括原节点的所有属性和子节点。</p><p>例子:</p><p>oldNode=xmlDoc.getElementsByTagName('book')[0];</p><p>newNode=oldNode.cloneNode(true);//克隆复制原节点以及所有属性和子节点</p><p>xmlDoc.documentElement.appendChild(newNode);</p><p>删除:</p><p>父节点调用removeChild实现。</p><p>例如:</p><p>varnodeBook=xmlDoc.getElementsByTagName("book")[0];//找到节点book</p><p>xmlDoc.documentElement.removeChild(nodeBook);//删除根节点下面的第一个book节点</p><p>注意:</p><p>删除某个节点,它下面的子节点也会被同时删除。</p><p>修改:</p><p>不允许直接修改元素。</p><p>若真要修改可以用replaceChild间接完成。</p><p>语法是:</p><p>parentNode.replaceChild(newNode,oldNode)</p><p>另外,元素没有nodeValue。</p><p>若要修改元素内的文本,如修改<title>hello里的hello,可参考下面的操作文本节点。

文本节点:

查找:

查找文本节点不能直接用getElementsByTagName,而是先用它找到元素节点,然后再用childNodes[0]或firstChild来定位文本节点(因为它是以元素节点的第一个子节点的形式存在的),接着再用nodeValue即可得到文本内容。

例子:

varnodeTitle=xmlDoc.getElementsByTagName("title")[0];

vartitleTextNode=nodeTitle.childNodes[0];//也可以用firstChild

vartheTxt=titleTextNode.nodeValue;

添加:

类似于元素的添加方式,但文本的添加是通过createTextNode创建的(note:

在XHTML也可以用innerHTML的方式添加)。

例子:

varedition=xmlDoc.createElement("edition");

varnewtext=xmlDoc.createTextNode("thisisfirst");

edition.appendChild(newtext);//在操作XHTML时,上面这两行可直接用edition.innerHTML=’thisisfirst’代替;

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

nodeBook.appendChild(edition);

删除:

父节点调用removeChild实现。

当然也可以用清空nodeValue的方式实现。

如textNode.nodeValue=’’。

修改:

textNode.nodeValue=’修改成你想要的文本内容’。

另外,文本节点的修改也可以用replaceData()替换文本节点中的数据。

replaceData()方法有三个参数:

offset-在何处开始替换字符。

Offset值以0开始。

length-要替换多少字符。

string-要插入的字符串。

例子:

xmlDoc.getElementsByTagName("title")[0].childNodes[0].replaceData(0,8,"hello");

//note:

其实完全可以用substr或者substring事先处理字符串,再赋值给nodeValue

属性节点:

查找:

与元素节点不同,属性节点拥有文本值。

获取属性的值的方法,就是获取它的文本值。

可以通过使用getAttribute()方法或属性节点的nodeValue属性来完成这个任务。

例子:

xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");//return“en”

或者

xmlDoc.getElementsByTagName("title")[0].getAttributeNode("lang").nodeValue;//return“en”

添加:

用setAttribute或者setAttributeNode实现。

例子:

xmlDoc.getElementsByTagName('book')[0].setAttribute("edition","thisisfirst");

或者

varnewAtt=xmlDoc.createAttribute("edition");

newAtt.nodeValue="thisisfirstfirst";

xmlDoc.getElementsByTagName("title")[0].setAttributeNode(newAtt);

删除:

可用removeAttribute(name)或者removeAttributeNode(node)

例子:

//方式1:

removeAttribute

//删除第一个元素中的"category"属性:

xmlDoc.getElementsByTagName("book")[0].removeAttribute("category");

//方式2:

removeAttributeNode

//删除所有元素的所有属性

x=xmlDoc.getElementsByTagName("book");

for(i=0;i

{

while(x.attributes.length>0)

{

attnode=x.attributes[0];

old_att=x.removeAttributeNode(attnode);

}

}

修改:

通过使用setAttribute()方法或属性节点的nodeValue属性来完成。

例子:

//setAttribute

xmlDoc.getElementsByTagName('book')[0].setAttribute("category","child");

//setnodeValue

varx=xmlDoc.getElementsByTagName("book")[0]

vary=x.getAttributeNode("category");

y.nodeValue="child";

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1