JS总结--(XML和Xpath) .

来源:互联网 发布:kindle for mac 下载 编辑:程序博客网 时间:2024/04/28 22:28

五、解析xml文件和字符串

 

ie中: xmlDoc = new ActionXObject("Microsoft.XMLDOM");

          xmlDoc.async = "false";

          xmlDoc.load("books.xml"); //xmlDoc.loadXml(txt);

 

ff中:xmlDoc = document.implementation.createDocument("","",null);

        xmlDoc.async = "false";      (关闭异步加载,确保在文档完整加载之前,解析器不会继续执行脚本)。

        xmlDoc.load("books.xml");

 

        //parser =  new DOMParser();

        //xmlDoc = perser.parseFromString(txt,"text/xml");

 

 

六、

 

1、获取: nodeValue 获取节点的文本值。

                getAttribute() 返回属性的值。

                getAttributeNode() 返回属性的节点。

 

     eg:  xmlDoc.getElementsByTagname("title")[0].getAttribute("lang");

            xmlDoc.getElementsByTagname("title")[0].getAttributeNode("lang").nodeValue;

 

2、改变: setAttribute()

3、删除: removeChild,removeAttribute()

4、替换: replaceChild(), 通过nodaValue替换。

5、创建: eg:    new = xmlDoc.createElment("edition");

                          xmlDoc.getElementsByTagname("book").appendChild(new);

     createAttribute()

               eg:   newatt = xmlDoc.creatAttribute("edition");

                       newatt.nodeValue = "first";

                       xmlDoc.getAttributeByTagname("title").setAttributeNode(newatt);

     setAttribute()

               eg:   xmlDoc.getElementsByTagname("title").setAttribute("edition","first");

     creatTextNode()

               eg:   newel = xmlDoc.creatElement("edition");

                       newtext = xmlDoc.createTextNode("first");

                       newel.appendChild(newtext);

                       xmlDoc.getElementsByTagname("book")[0].appendChild(newel);

     creatCDATASection()

     creatComment()

6、添加节点: appendChild()

     插入节点: insertBefore()

               eg:   newnode = xmlDoc.creatElement("book");

                       xmlDoc.documentElement.insertBefore(newnode,xmlDoc.getElementsByTagname("book")[3]);

 

     x.insertBefore(newnode,null) 和x.appendChild(newNode) 可向x追加一个子节点。

    

    insertData()  将数据插入到已有的文本节点中。

              eg:    x = xmlDoc.getElementsByTagname("title")[0].childNodes[0];

                       x.insertData(0,"hello");

    cloneNode()

                              

 

 

七、Xpath

 

表达式描述nodename选取此节点的所有子节点/从根节点选取//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置.选取当前节点..选取当前节点的父节点@选取属性

 

实例

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式结果bookstore选取 bookstore 元素的所有子节点/bookstore

选取根元素 bookstore

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book选取所有属于 bookstore 的子元素的 book 元素。//book选取所有 book 子元素,而不管它们在文档中的位置。bookstore//book选择所有属于 bookstore 元素的后代的 book 元素,而不管它们位于 bookstore 之下的什么位置。//@lang选取所有名为 lang 的属性。

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

实例

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。/bookstore/book[price>35.00]选取所有 bookstore 元素的 book 元素,且其中的 price 元素的值须大于 35.00。/bookstore/book[price>35.00]/title选取所有 bookstore 元素中的 book 元素的 title 元素,且其中的 price 元素的值须大于 35.00。

选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符描述*匹配任何元素节点@*匹配任何属性节点node()匹配任何类型的节点

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果/bookstore/*选取 bookstore 元素的所有子节点//*选取文档中的所有元素//title[@*]选取所有带有属性的 title 元素。

选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果//book/title | //book/price选取所有 book 元素的 title 和 price 元素。//title | //price选取所有文档中的 title 和 price 元素。/bookstore/book/title | //price选取所有属于 bookstore 元素的 book 元素的 title 元素,以及文档中所有的 price 元素。

 

 

 

XPath 轴

轴可定义某个相对于当前节点的节点集。

轴名称结果ancestor选取当前节点的所有先辈(父、祖父等)ancestor-or-self选取当前节点的所有先辈(父、祖父等)以及当前节点本身attribute选取当前节点的所有属性child选取当前节点的所有子元素。descendant选取当前节点的所有后代元素(子、孙等)。descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身。following选取文档中当前节点的结束标签之后的所有节点。namespace选取当前节点的所有命名空间节点parent选取当前节点的父节点。preceding选取文档中当前节点的开始标签之前的所有节点。preceding-sibling选取当前节点之前的所有同级节点。self选取当前节点。

位置路径表达式

位置路径可以是绝对的,也可以是相对的。

绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:

绝对位置路径:

/step/step/...

相对位置路径:

step/step/...

每个步均根据当前节点集之中的节点来进行计算。

步(step)包括:

轴(axis)
定义所选节点与当前节点之间的树关系
节点测试(node-test)
识别某个轴内部的节点
零个或者更多谓语(predicate)
更深入地提炼所选的节点集

步的语法:

轴名称::节点测试[谓语]

实例

例子结果child::book选取所有属于当前节点的子元素的 book 节点attribute::lang选取当前节点的 lang 属性child::*选取当前节点的所有子元素attribute::*选取当前节点的所有属性child::text()选取当前节点的所有文本子节点child::node()选取当前节点的所有子节点descendant::book选取当前节点的所有 book 后代ancestor::book选择当前节点的所有 book 先辈ancestor-or-self::book选取当前节点的所有book先辈以及当前节点(假如此节点是book节点的话)child::*/child::price选取当前节点的所有 price 孙。