XML DOM完全参考手册(二)DOM节点

前端之家收集整理的这篇文章主要介绍了XML DOM完全参考手册(二)DOM节点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

解析 XML DOM

大多数浏览器都内建了供读取和操作 XML 的 XML 解析器。

解析器把 XML 转换为 JavaScript 可存取的对象。

解析 XML

所有现代浏览器都内建了用于读取和操作 XML 的 XML 解析器。

解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象。

微软的 XML 解析器与其他浏览器中的解析器是有差异的。微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都含有遍历 XML 树、访问、插入及删除节点的函数

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

微软的 XML 解析器内建于 Internet Explorer 5 及更高版本中。

下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器:

  1. xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  2. xmlDoc.async="false";
  3. xmlDoc.load("books.xml");

代码解释:

  • 第一行创建空的微软 XML 文档对象
  • 第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
  • 第三行告知解析器加载名为 "books.xml" 的文档

下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:

  1. xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  2. xmlDoc.async="false";
  3. xmlDoc.loadXML(txt);
注释:loadXML()方法用于加载字符串(文本),而load()用于加载文件

在 Firefox 及其他浏览器中的 XML 解析器

下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器:
  1. <span style="background-color: rgb(249,249);">x</span><span style="background-color: rgb(255,255);">mlDoc=document.implementation.createDocument("","",null);
  2. xmlDoc.async="false";
  3. xmlDoc.load("books.xml");</span>

代码解释:

  • 第一行创建空的 XML 文档对象
  • 第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
  • 第三行告知解析器加载名为 "books.xml" 的文档

下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:


  1. <span style="background-color: rgb(255,255);">parser=new DOMParser();
  2. xmlDoc=parser.parseFromString(txt,"text/xml");</span>

第一行创建一个空的 XML 文档对象
  • 第二行告知解析器加载名为 txt 的字符串
  • 注释:Internet Explorer 使用loadXML()方法来解析 XML 字符串,而其他浏览器使用DOMParser对象。

    1. <span style="background-color: rgb(255,255);"><html>
    2. <body>
    3. <script type="text/javascript">
    4. try //Internet Explorer
    5. {
    6. xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    7. }
    8. catch(e)
    9. {
    10. try //Firefox,Mozilla,Opera,etc.
    11. {
    12. xmlDoc=document.implementation.createDocument("",null);
    13. }
    14. catch(e) {alert(e.message)}
    15. }
    16. try
    17. {
    18. xmlDoc.async=false;
    19. xmlDoc.load("books.xml");
    20. document.write("xmlDoc is loaded,ready for use");
    21. }
    22. catch(e) {alert(e.message)}
    23. </script>
    24. </body>
    25. </html></span>

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

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

    1. <span style="background-color: rgb(255,255);"><html>
    2. <body>
    3. <script type="text/javascript">
    4. text="<bookstore>"
    5. text=text+"<book>";
    6. text=text+"<title>Harry Potter</title>";
    7. text=text+"<author>J K. Rowling</author>";
    8. text=text+"<year>2005</year>";
    9. text=text+"</book>";
    10. text=text+"</bookstore>";
    11.  
    12. try //Internet Explorer
    13. {
    14. xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    15. xmlDoc.async="false";
    16. xmlDoc.loadXML(text);
    17. }
    18. catch(e)
    19. {
    20. try //Firefox,etc.
    21. {
    22. parser=new DOMParser();
    23. xmlDoc=parser.parseFromString(text,"text/xml");
    24. }
    25. catch(e) {alert(e.message)}
    26. }
    27. document.write("xmlDoc is loaded,ready for use");
    28. </script>
    29. </body>
    30. </html></span>

    XML DOM 访问节点



    1. function loadXMLDoc(dname)
    2. {
    3. try //Internet Explorer
    4. {
    5. xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    6. }
    7. catch(e)
    8. {
    9. try //Firefox,null);
    10. }
    11. catch(e) {alert(e.message)}
    12. }
    13. try
    14. {
    15. xmlDoc.async=false;
    16. xmlDoc.load(dname);
    17. return(xmlDoc);
    18. }
    19. catch(e) {alert(e.message)}
    20. return(null);
    21. }
    一个通用的加载XML的方法

    访问节点

    您可以通过三种方法来访问节点:

      通过使用 getElementsByTagName() 方法
    1. 通过循环(遍历)节点树
    2. 通过利用节点的关系在节点树中导航
    循环遍历访问title节点
    1. xmlDoc=loadXMLDoc("books.xml");
    2. x=xmlDoc.getElementsByTagName("title");
    3. for (i=0;i<x.length;i++)
    4. {
    5. document.write(x[i].childNodes[0].nodeValue);
    6. document.write("<br />");
    7. }

    例子解释:

      使用loadXMLDoc()把 "books.xml" 载入 xmlDoc
    1. 取得所有 <title> 元素节点
    2. 输出每个 <title> 元素的文本节点的值

    Node Type

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

    节点的nodeName属性是节点的名称

    节点的nodeType属性是节点的类型。

    遍历节点

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

    1. xmlDoc=loadXMLDoc("books.xml");
    2.  
    3. x=xmlDoc.documentElement.childNodes;
    4.  
    5. for (i=0;i<x.length;i++)
    6. {
    7. if (x[i].nodeType==1)
    8. {//Process only element nodes (type 1)
    9. document.write(x[i].nodeName);
    10. document.write("<br />");
    11. }
    12. }

    通过使用books.xml" 载入 xmlDoc 中
  • 获得根元素的子节点
  • 检查每个子节点的节点类型。如果节点类型是 "1",则是元素节点
  • 如果是元素节点,则输出节点的名称

  • XML DOM 节点信息

    节点的属性

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

    对象拥有方法功能)和属性(关于对象的信息),并可通过 JavaScript 进行访问和操作。

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

      nodeName
    • nodeValue
    • nodeType

    nodeName 属性

    nodeName 属性规定节点的名称

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

    nodeValue 属性

    nodeValue 属性规定节点的值。

      元素节点的 nodeValue 是 undefined
    • 文本节点的 nodeValue 是文本自身
    • 属性节点的 nodeValue 是属性的值

    更改元素的值

    下面的代码更改第一个 <title> 元素的文本节点的值:
    1. xmlDoc=loadXMLDoc("books.xml");
    2.  
    3. x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
    4. x.nodeValue="Easy Cooking";

    通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中
  • 获取第一个 <title> 元素节点的文本节点
  • 把文本节点的值更改为 "Easy Cooking"

  • nodeType 属性

    nodeType 属性规定节点的类型。

    nodeType 是只读的。

    最重要的节点类型是:

    元素类型 节点类型
    元素 1
    属性 2
    文本 3
    注释 8
    文档 9

    猜你在找的XML相关文章