zoukankan      html  css  js  c++  java
  • XML CDATA

    所有 XML 文档中的文本均会被解析器解析。

    xml解析器会将:

    <name><first>Bill</first><last>Gates</last></name>

    解析为如下:

    <name>
       <first>Bill</first>
       <last>Gates</last>
    </name>

    只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

    术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。

    在 XML 元素中,"<" 和 "&" 是非法的。

    "<" 会产生错误,因为解析器会把该字符解释为新元素的开始。

    "&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。

    某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。

    CDATA 部分中的所有内容都会被解析器忽略。

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

    <script>
    <![CDATA[
    function matchwo(a,b)
    {
    if (a < b && a < 0) then
      {
      return 1;
      }
    else
      {
      return 0;
      }
    }
    ]]>
    </script>

    解析xml,同样也适用于CDATA:

    <script type="text/javascript">
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("GET","/example/xmle/note.xml",false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML;
    document.getElementById("to").innerHTML=
    xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
    document.getElementById("from").innerHTML=
    xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
    document.getElementById("message").innerHTML=
    xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
    </script>

    在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。

    关于 CDATA 部分的注释:

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

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

    JS解析xml文件和字符串(loadXML方法):

    //XML文件
    <script type='text/javascript'>
        loadXML = function(xmlFile){
            var xmlDoc=null;
            //判断浏览器的类型
            //支持IE浏览器
            if(!window.DOMParser && window.ActiveXObject){
                var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM'];
                for(var i=0;i<xmlDomVersions.length;i++){
                    try{
                        xmlDoc = new ActiveXObject(xmlDomVersions[i]);
                        break;
                    }catch(e){
                    }
                }
            }
            //支持Mozilla浏览器
            else if(document.implementation && document.implementation.createDocument){
                try{
                    /* document.implementation.createDocument('','',null); 方法的三个参数说明
                     * 第一个参数是包含文档所使用的命名空间URI的字符串; 
                     * 第二个参数是包含文档根元素名称的字符串; 
                     * 第三个参数是要创建的文档类型(也称为doctype)
                     */
                    xmlDoc = document.implementation.createDocument('','',null);
                }catch(e){
                }
            }
            else{
                return null;
            }
    
            if(xmlDoc!=null){
                xmlDoc.async = false;
                xmlDoc.load(xmlFile);
            }
            return xmlDoc;
        }
    </script>
    //XML字符串
    <script type='text/javascript'>
        loadXML = function(xmlString){
            var xmlDoc=null;
            //判断浏览器的类型
            //支持IE浏览器 
            if(!window.DOMParser && window.ActiveXObject){   //window.DOMParser 判断是否是非ie浏览器
                var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM'];
                for(var i=0;i<xmlDomVersions.length;i++){
                    try{
                        xmlDoc = new ActiveXObject(xmlDomVersions[i]);
                        xmlDoc.async = false;
                        xmlDoc.loadXML(xmlString); //loadXML方法载入xml字符串
                        break;
                    }catch(e){
                    }
                }
            }
            //支持Mozilla浏览器
            else if(window.DOMParser && document.implementation && document.implementation.createDocument){
                try{
                    /* DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。
                     * 要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法
                     * parseFromString(text, contentType) 参数text:要解析的 XML 标记 参数contentType文本的内容类型
                     * 可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注意,不支持 "text/html"。
                     */
                    domParser = new  DOMParser();
                    xmlDoc = domParser.parseFromString(xmlString, 'text/xml');
                }catch(e){
                }
            }
            else{
                return null;
            }
    
            return xmlDoc;
        }
    </script>
    1.x=xmlDoc.documentElement.childNodes;//获取所有子节点
    2.txt=xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;//获取第一个节点的第一个值
    //解释
    xmlDoc
    - 由解析器创建的 XML DOM

    getElementsByTagName("title")[0] - 第一个 <title> 元素
    childNodes[0] - <title> 元素的第一个子节点 (文本节点)
    nodeValue - 节点的值 (文本自身)

    xml属性和方法:

    //x 是一个节点对象
    //
    属性 •x.nodeName - x 的名称 •x.nodeValue - x 的值 •x.parentNode - x 的父节点 •x.childNodes - x 的子节点 •x.attributes - x 的属性节点 //方法 •x.getElementsByTagName(name) - 获取带有指定标签名称的所有元素 •x.appendChild(node) - 向 x 插入子节点 •x.removeChild(node) - 从 x 删除子节点
  • 相关阅读:
    【React Native】某个页面禁用物理返回键
    【React Native】DeviceEventEmitter监听通知及带参数传值
    转载【React Native代码】手写验证码倒计时组件
    【React Native】 中设置 APP 名称、应用图标、为安卓添加启动图
    【React Native错误集】* What went wrong: Execution failed for task ':app:installDebug'.
    【React Native错误集】Import fails with "Failed to execute 'ImportScripts' on 'WorkerGlobalScope'"
    【React Native错误集】Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start of app
    「React Native笔记」在React的 setState 中操作数组和对象的多种方法(合集)
    【React Native】Error: Attribute application@allowBackup value=(false) from AndroidManifest.xml
    坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?
  • 原文地址:https://www.cnblogs.com/ytwy/p/5058451.html
Copyright © 2011-2022 走看看