• 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 删除子节点
  • 相关阅读:
    Mybatis 使用 mapper 接口规范的 一对一, 一对多,多对多映射
    mybatis mapper接口开发dao层
    使用 maven 搭建web开发基本架构
    mybatis dao 层开发简易版 非整合 spring
    mybatis 不整合spring 入门小例子
    spring+spring mvc+JdbcTemplate 入门小例子
    PythonCharm 配置本地反向代理激活
    Python 算法实现
    不写一行代码,绿色三层我也行
    pythonday
  • 原文地址:https://www.cnblogs.com/ytwy/p/5058451.html
Copyright © 2020-2023  润新知