zoukankan      html  css  js  c++  java
  • XML学习入门

      很久没更新博客了。来一发!

      关于XML,当时没学过感觉难吧?其实XML还是蛮好学的,这里留下一些入门级别的内容。

      XML中dtd(文档类型定义)的主要用处是约束xml,也可以去约束html,xhtml。

      xml中标签可以自定义,而HTML的标签是有规矩的,比如使用<body>标签就不能换成<bodya></bodya>,使用<bodya>这种标签,浏览器并不认识,HTML在这个特点上显得有点死板,而XML很有灵活性,标签的自定义!

      顺序:写个xml文件--->创建dtd文件约束xml文件-->通过JavaScript校验xml的正确性

      带来一段简单的XML代码:

        

    <?xml version="1.0" encoding="gb2312"?>
    <班级>
    <stu stuNo="a0&quot;01">
    <name>孙悟空</name>
    <sex></sex>
    <age>500</age>
    <介绍><![CDATA[^$*(((&^$$##]]></介绍>
    </stu>
    <stu stuNo="a002">
    <name>白骨精</name>
    <sex></sex>
    <介绍><![CDATA[@$&*((*男^^)__*%$&$#@_+]]></介绍>
    <age>100</age>
    </stu>
    </班级>
    <!--
    //CDATA可以保存一些特殊的内容如特殊的字符
    <![CDATA[@$&*((*^^)__*%$&$#@_+]]>
    -->

       这里我<?xml version="1.0" encoding="gb2312"?>设置是gb2312编码,一般情况而言是utf-8编码,因为我的文件编码是gb2312并且浏览器编码是gb2312所以使用gb2312编码不会造成乱码,最好使用utf-8编码

      可以保存一些特殊字符串用<![CDATA[特殊字符]]>

      运行我们的xml代码:

      

      仔细看注释部分<![CDATA[专门处理一些特殊字符]]>

      在这里xml他的标签可以随意编写,但是要注意标签要闭合,更关键的是XML元素一定要有一个根标签,一个XML只允许有一个根标签!我上面的XML代码中,<班级></班级>包裹着我的xml标签!当存在两个根标签的时候,就会报错:

    具体情况如下:

     

      这就是所谓的一山容不了二虎!一个XML文档只能拥有一个根元素!

         关于DTD

    笔记如下:

    {    

    可以保存一些特殊字符串用<![CDATA[特殊字符]]>
    DTD元素类型三种:
    1.EMPTY -- 该元素不能包含子元素和文本,但可以有属性--(空元素)
    2.ANY -- 该元素可以包含任何在DTD中(定义的元素内容),只要是定义的元素内容都可以嵌套,可以包含其他子元素
    3.(#PCDATA) -- 可以包含任何字符数据,但是不能在其中包含任何一个子元素或其他类型

    在xml文件中引入dtd文件的两种方式
    1.本地引入dtd
    <!DOCTYPE 根元素 SYSTEM “被引入的dtd文件的路径”
    2.引入一个公开的dtd
    <!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD URL地址" >
    3.内部文档引入dtd
    <!DOCTYPE 根元素 [

    ]>

    -----------------------------------------------------------------------------------

    + 1-多
    * 0-多
    ? 0-1
    | 二选一
    , 元素出现的顺序

    dtd属性定义语法
    <!ATTLIST 元素名称
    属性名字 属性类型 属性特点
    >
    属性类型有五种:
    CDATA [表示属性值可以是字符或者数字]
    ID [属性值是唯一的,字母开头]
    IDREF/IDREFS [引用说明。IDREF是引用一次,IDREFS是引用多次]
    Enumerated 枚举 枚举类型距离 婚姻 (单身|结婚|离婚) #REQUIRED
    ENTITY/ENTITIES
    ----------------
    属性特点
    #REQUIRED [该属性必须有]
    #IMPLIED [该属性可有可无]
    #FIXED value [该属性是固定的必须有]
    Default [该属性是默认值]
    实体引用:
    dtd中使用:
    <!ENTITY intro "value"> (intro可以自定义)
    xml文档引用方法:
    &intro;
    --------------
    参数实体引用:
    只能用于dtd文档
    <!ENTITY % sName "value">
    dtd调用
    %sName;

    }

      写一段代码方便理解,看不懂代码看看上面笔记互相对照

      先本地引入一个dtd的方法代码如下 :

      

    <?xml version="1.0" encoding="gb2312"?>
    <!--通过本地引入dtd-->
    <!DOCTYPE 班级 SYSTEM "classes2.dtd">
    <班级>
        <学生 住址="香格里拉" 大佬="a001" 学号="a001" 国籍="中国" 婚姻状态="单身">
            <名字>路人甲</名字>
            <年龄>20</年龄>
            <介绍>&intro;学习刻苦</介绍>
        </学生>
        <学生 学号="a002" 大佬="a002" 婚姻状态="结婚">
            <名字>白帽子</名字>
            <年龄>30</年龄>
            <介绍>学习刻苦</介绍>
        </学生>
        <学生 学号="a003" 大佬="a003" 婚姻状态="结婚">
            <名字>刘德华</名字>
            <年龄><介绍>哈哈</介绍></年龄>
            <介绍>&intro;学习刻苦</介绍>
        </学生>
    </班级>

      关于dtd代码如下:

      

      dtd文档的作用是为了约束xml文件

      dtd代码如下:

      

    <?xml version="1.0" encoding="gb2312"?>
    <!--定义一个引用实体,介意大家把引用实体的定义放在最前面-->
    <!ENTITY intro "这是一个介绍:">
    <!--定义一个参数实体-->
    <!ENTITY % sName "名字">
    <!ELEMENT 班级 (学生+)>
    <!ATTLIST 学生 
        住址 CDATA #IMPLIED
        学号 ID  #REQUIRED    
        大佬 IDREFS #REQUIRED
        婚姻状态 (单身|结婚|离婚) #REQUIRED
        国籍  CDATA #FIXED  "中国" 
    >
    <!ELEMENT 学生 (%sName;,年龄,介绍)>
    <!ELEMENT %sName; (#PCDATA)>
    <!ELEMENT 年龄 ANY>
    <!ELEMENT 介绍 (#PCDATA)>

      关于内部引用dtd方法,代码如下:

      

    <?xml version="1.0" encoding="gb2312"?>
    <!--引入dtd-->
    <!DOCTYPE 班级 [
    <!ELEMENT 班级 (学生+)>
    <!ELEMENT 学生 (名字,年龄,介绍)>
    <!ELEMENT 名字 (#PCDATA)>
    <!ELEMENT 年龄 (#PCDATA)>
    <!ELEMENT 介绍 (#PCDATA)>
    ]>
    <班级>
        <学生>
            <名字>路人甲</名字>
            <年龄>20</年龄>
            <介绍>学习刻苦</介绍>
            <面积>1111</面积>
        </学生>
        <学生>
            <名字>白帽子</名字>
            <年龄>30</年龄>
            <介绍>学习刻苦</介绍>
        </学生>
    </班级>

       

      

      

      现在:通过JavaScript校验xml的正确性

      写一段JavaScript代码来检查dtd验证xml文件的规范性:

      只支持IE的写法:

        

    <html>
    <meta charset="utf-8">
    <head>
    <title>测试dtd</title>
    <script type="text/javascript">
        //这种写法只能支持IE浏览器下验证判断
        //用来校验xml文件是否正确,使用xml解析器来解析
        //创建一个xml解析器
        //使用JavaScript检测自己的xml文件是否错误
        var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
    
        //开启校验功能
        xmldoc.validateOnParse = true;
        //指定对哪个xml文件校验
        xmldoc.load("classes2.xml");
        //如果有错误信息就输出
        document.write("错误信息="+xmldoc.parseError.reason+"<br/>");
        document.write("错误的行号="+xmldoc.parseError.line);
    </script>
    </head>
    </html>

        

    xmldoc.load("classes2.xml");这里可以把
    classes2.xml替换成你想要检查的xml文件

    运行检验代码发现没有报错信息说明我们的xml文件在我们dtd的约束下!
    打破规则让JS文件检测错误
    为xml文件多加个标签:

    我自己多加个<面积>这个标签:
    刷新我们的检验脚本:


    提示20行报错了!
    两种解决错误的方法:
    1.删除<面积>标签
    2.dtd里面添加面积标签!
    第一种解决报错的方法很简单不演示了,演示下第二种解决报错的方法:
    t

    添加个面积成功解决了报错问题!这个JavaScript写的检测工具非常好用,方便我们的调试!

    XML入门系列就写到这里!Done~
     
     
     
    
    
    

       

        

      

  • 相关阅读:
    爬虫中动态的POST参数
    Sublime3注册码和安装中文包
    [pytorch][进阶之路]pytorch学习笔记二-自动求导和module
    [pytorch][进阶之路]pytorch学习笔记一
    [python][进阶之路]理解python中的深复制和浅复制
    [python][matlab]在python36上安装matlab2015b引擎
    [python][进阶之路]list复制引发的问题
    [python][pandas]DataFrame的基本操作
    [Algorithm]ADMM简明理解
    [python][cpp]对浮点数进行n位翻转
  • 原文地址:https://www.cnblogs.com/piaomiaohongchen/p/7487171.html
Copyright © 2011-2022 走看看