zoukankan      html  css  js  c++  java
  • JavaScript使用浏览器内置XML解析器解析DOM对象

    所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器。解析器把 XML 转换为 XML DOM 对象 (可通过 JavaScript 操作的对象)。

    一、获取DOM对象

    XMLHttpRequest执行ajax响应的XML文档转为DOM对象

    var xmlhttp=null;
    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome
        xmlhttp=new XMLHttpRequest();
    }else{// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","note.xml",false);
    xmlhttp.send();
    var xmlDoc=xmlhttp.responseXML; //将xml文档转换为XML DOM对象

    解析外部 XML 文档为DOM对象

    var xmlDoc=null;
    if (window.XMLHttpRequest){//其他浏览器
        xmlDoc=document.implementation.createDocument("","",null);//创建一个空的 XML 文档对象
    }else{//IE5及以上版本
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");//创建一个空的 XML 文档对象
    }
    xmlDoc.async="false";//关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行
    xmlDoc.load("note.xml");//加载文件,告知解析器加载名为 "note.xml" 的 XML 文档

    解析 XML 字符串为DOM对象

    var txt="<bookstore><book><title>java</title><author>GD</author><year>2016</year></book></bookstore>";
    var xmlDoc=null;
    if (window.DOMParser){//其他浏览器
        var parser=new DOMParser();
        xmlDoc=parser.parseFromString(txt,"text/xml");
    }else{//IE浏览器
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async="false";
        xmlDoc.loadXML(txt);//加载字符串
    }

    二、解析DOM对象

    //xmlDoc -由解析器创建的 XML 文档
    //getElementsByTagName("to")[0] - 第一个 <to> 元素
    //childNodes[0] - <to> 元素的第一个子元素(文本节点)
    //nodeValue - 节点的值(文本本身)
    
    //获取第一个to元素的第一个子元素的值
    xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
    
    //检索第一个 <title> 元素的 "lang" 属性的文本值
    xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");
    
    //改变第一个 <title> 元素的 "lang" 属性的文本值为first
    xmlDoc.getElementsByTagName("title")[0].setAttribute("lang","first");
    
    //改变第一个 <title> 元素的文本值
    xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue="wb";
    
    newel=xmlDoc.createElement("edition");//创建 <edition> 元素
    newtext=xmlDoc.createTextNode("First");//创建值为 "First" 的文本节点
    newel.appendChild(newtext);//把这个文本节点追加到 <edition> 元素
    x=xmlDoc.getElementsByTagName("book");
    x[0].appendChild(newel);//把 <edition> 元素追加到第一个 <book> 元素
    
    //删除指定的节点(或元素),删除第一个 <book> 元素中的第一个节点
    xmlDoc.getElementsByTagName("book")[0].removeChild(
        xmlDoc.getElementsByTagName("book")[0].childNodes[0]
    );

    三、注意

    1、出于安全方面的原因,现代的浏览器不允许跨域的访问。这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。否则,xmlDoc.load() 将产生错误 "Access is denied"。

    2、所有 XML 文档中的文本均会被解析器解析。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

    CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束

    CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。

    标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。

  • 相关阅读:
    触摸屏与usb鼠标同时支持
    QT国际化(lupdate/linguits/lrelease)生成.ts,转换成.qm方法
    Qt5 使用lambda
    c++中lambda表达式的用法
    异或运算的作用
    函数指针和指针函数用法和区别
    前端html页面学习---html部分
    二:maven构建module
    一:使用maven构建项目
    maven项目发布到tomcat后没有lib目录解决方案
  • 原文地址:https://www.cnblogs.com/wbxk/p/6060904.html
Copyright © 2011-2022 走看看