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 部分结尾的 "]]>" 不能包含空格或折行。

  • 相关阅读:
    使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
    便携版WinSCP在命令行下同步文件夹
    ffmpeg (ffprobe)分析文件关键帧时间点
    sqlite删除数据或者表后,回收数据库文件大小
    ubuntu 20.04下 freeswitch 配合 fail2ban 防恶意访问
    ffmpeg使用nvenc编码的结论记录
    PC版跑跑卡丁车 故事模式 亚瑟传说章节 卡美洛庆典 2阶段 心灵之眼 攻略
    There was an error loading or playing the video
    Nvidia RTX Voice 启动报错修复方法
    火狐浏览器 关闭跨域限制
  • 原文地址:https://www.cnblogs.com/wbxk/p/6060904.html
Copyright © 2011-2022 走看看