zoukankan      html  css  js  c++  java
  • XML使用总结(一)

    XML使用总结(一):

    XML是一种可拓展的标记语言,被设计用来描写叙述、存储及传递数据的语言体,而它的标签没有被提前定义,须要用户自行定义,是W3C推荐的数据存储和传递的标准标记语言。

    ·     XML与HTML?

    ·     XML的用途?

    ·     XML结构语法?

    ·     XML元素属性?

    ·     XML的验证?

    ·     XML的解析?

    一、XML与HTML

    我们知道HTML也是典型的标记语言,那么它们的差别:

    1、为不同的目标而设计

    XML设计用来存储描写叙述和传递数据的。焦点在于数据内容;而HTML被设计用来显示数据的,焦点在于数据的外观展示。

    2、XML不是HTML的替代品

    XML不是HTML的替代品,它是一种独立于软件和硬件的数据传递工具,前者是用来传递数据,而后者是用来显示数据的。

    二、XML的用途

    XML应用在Web开发的很多方面。经常使用在数据存储、传递和共享。很多其它用途例如以下所看到的:

    1、简化传输数据

    通过XML,能够轻松的在不同系统平台间传递数据,能够降低系统移植。不同应用程序间交互数据所带来的数据处理复杂问题。

    2、简化数据共享

    XML是以纯文本形式存储数据。因此提供了一种独立与软件和硬件的数据存储方式,使不同应用程序共享数据更easy。

    3、互联网语言

    非常多互联网语言都是通过XML创建的:

    XHTML  --新版的HTML

    WSDL  --描写叙述Web Services

    WAP与WML  --用于手持设备的语言

    RSS  --用于RSS feed语言

    RDF与OWL  --描写叙述资源和本体

    SMIL  --描写叙述针对web的多媒体

    4、HTML数据分离

    通过XML,数据独立存储在文件里,这样能够仅仅专注与HTML的布局和显示,并确保改动底层数据不再对HTML改动,并且实现方式比較简单,仅仅须要通过几行JavaScript代码就能够读取XML文件内容。并动态显示到HTML中。

    三、XML结构语法

    1、结构

    XML描写叙述体是一种树结构,从“根部”開始,然后拓展到“枝叶”结束,结构图例如以下:

    上面的结构图描写叙述了一类商品的单品属性。相应的XML描写叙述文件:

    <?

    xml version="1.0" encoding="UTF-8"?

    >

    <producttype>

        <product category="PHP">

            <no lang="中译文">NOC0001</no>

            <name>PHP高级设计教程</name>

            <price>88.99</price>

           <time>2015.12.30</time>

        </product>

        <product category="JAVA">

            <no lang="中译文">NOC0002</no>

            <name>Thinking inJava</name>

           <price>102.99</price>

           <time>2004.03.30</time>

        </product>

        <product category="WEB">

            <no lang="英原版">NOC0003</no>

            <name>WEB高级开发教程</name>

           <price>78.99</price>

           <time>2012.07.30</time>

        </product>

    </producttype>

    NOTE:

    XML文件第一行声明XML的版本号为1.0。编码格式为utf-8格式。

    <producttype>为根元素。它以下能够有多个子元素,根元素是必须有的元素。

    <product category="">为子元素。也是以下属性的根元素。category为该元素的属性,该元素以下即为四个子元素。

    </producttype>为相应上面的跟元素的结束标记。相同</product>也为相应的结束标记。

    2、语法

    <?xml version="1.0" encoding="UTF-8"?

    >

    <root>

        <child>

           <subchild>...</subchild>

        </child>

        ...

    </root>

    NOTE:

    XML文档描写叙述必须有根元素;

    XML元素必须有相应的关闭标记。

    XML元素标记区分大写和小写。

    XML元素的属性值必须加引號。

    XML中空格保留。多个连续空格合为一个空格;

    XML实体引用:

    对于某些特殊字符。XML编译器会把它当作特殊的处理。如:< 符号。会被当作新的元素的開始。所以元素内容含有该符号时,就会报错,解决的办法是引用实体解决:

    比如:

    <note>if age < 30 then</note>  -这个是错误的;

    <note>if age &lt; then</note>  -这个是正确的。

    提前定义的实体符号:


    NOTE:

    对于<和&在XML中是非法的。而>是合法的,可是这里建议使用实体引用取代直接使用。

    在XML中的凝视类似HTML:<!—comment -->;

    在XML中,以LF来存储换行:

    Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。

    这对字符与打字机设置新行的动作有相似之处。

    Unix 应用程序中,新行以 LF 字符存储。

    Macintosh 应用程序使用 CR 来存储新行。

    四、XML元素属性

    1、什么是元素

    元素指的是从标记的開始(含開始标签),到标记结束(含结束标记)间的部分。

    元素包括内容:

    元素能够包括元素。包括文本,也能够含有属性;

    XML命名规则:

    名字可含字母、数字及其他字符;

    名字不能含数字或标点符開始;

    名字不能以字符xml、XML或Xml开头;

    名字不能含空格。

    NOTE:

    名字应该比較短。推荐使用下划线,比如:<product_name>,不建议使用特殊字符;

    XML元素拓展性。

    XML能够在不中断应用程序的情况下,拓展XML的内容。

    2、属性

    属性是对元素的补充。一般存放数据无关的数据,XML元素能够在标签開始处包括。

    A、XML属性必须使用引號;

    B、XML的避免使用,因使用属性而引起的一些问题:

    属性无法包括多重的值(元素能够)

    属性无法描写叙述树结构(元素能够)

    属性不易扩展(为未来的变化)

    属性难以阅读和维护

    请尽量使用元素来描写叙述数据。

    而只使用属性来提供与数据无关的信息。

    NOTE:

    请尽量使用元素来描写叙述数据。而只使用属性来提供与数据无关的信息。

    C、以下为推荐的属性使用:

        <product category="PHP">

            <id>1001</id>

            <no>NOC0001</no>

            <name>PHP高级设计教程</name>

           <price>88.99</price>

           <time>2015.12.30</time>

        </product>

    上面的ID和no都使用了属性。它们属于数据的补充或附加数据,另外,常常会使用ID来编号元素。比方ID,它与数据本身并无必定关系。当然。有时可自行定义元素,来满足业务的数据需求。

    五、XML的验证

    XML的验证包括两部分:形式和合法性。语法正确的XML是形式良好的XML。而经过DTD验证的即为合法的XML。以下详细分析:

    XML的验证

    形式良好的XML :

    ·     XML 文档必须有根元素

    ·     XML 文档必须有关闭标签

    ·     XML 标签对大写和小写敏感

    ·     XML 元素必须被正确的嵌套

    ·     XML 属性必须加引號

    NOTE:

    <producttype>

        <product category="PHP">

            <id>1001</id>

            <no>NOC0001</no>

            <name>PHP高级设计教程</name>

           <price>88.99</price>

           <time>2015.12.30</time>

        </product>

        <product category="JAVA">

            <id>1002</id>

            <no>NOC0002</no>

            <name>Thinking inJava</name>

            <price>102.99</price>

           <time>2004.03.30</time>

        </product>

        <product category="WEB">

            <id>1003</id>

            <no>NOC0003</no>

            <name>WEB高级开发教程</name>

           <price>78.99</price>

           <time>2012.07.30</time>

        </product>

    </producttype>

    形式合法的XML:

    DTD是用来验证XML的结构合法性的语法规则,使用一系列合法的元素定义文档结果:

    <!DOCTYPE product [

      <!ELEMENT producttype(product,id,no,name,price,time) >

      <!ELEMENT product(id,no,name,price,time) >

      <!ELEMENT id (#PCDATA) >

      <!ELEMENT no (#PCDATA) >

      <!ELEMENT name (#PCDATA) >

      <!ELEMENT price (#PCDATA) >

      <!ELEMENT time (#PCDATA) >

    ]>

    怎样验证?

    <?

    xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE product SYSTEM "product.dtd">

    <producttype>

        <product category="PHP">

            <id>1001</id>

            <no>NOC0001</no>

            <name>PHP高级设计教程</name>

           <price>88.99</price>

           <time>2015.12.30</time>

        </product>

        <product category="JAVA">

            <id>1002</id>

            <no>NOC0002</no>

            <name>Thinking inJava</name>

           <price>102.99</price>

            <time>2004.03.30</time>

        </product>

        <product category="WEB">

            <id>1003</id>

            <no>NOC0003</no>

            <name>WEB高级开发教程</name>

           <price>78.99</price>

           <time>2012.07.30</time>

        </product>

    </producttype>

    NOTE:

    仅仅须要使用<!DOCTYPE product SYSTEM "product.dtd">引用,程序执行时自己主动编译并验证XML是否符合自己定义的 DTD规则。

    另外,W3C 支持一种基于 XML 的 DTD取代者。它名为 XML Schema。兴许会继续总结。

    六、XML的解析

    1、JavaScript解析:

    A、XML文件解析:

    js解析脚本:

    /**

     * XML文档的解析脚本

     */

    window.onload = function(){

          // code for IE7+, Firefox,Chrome, Opera, Safari

          if(window.XMLHttpRequest) { 

                xmlHttp = newXMLHttpRequest();

          } else {                     // code for IE6, IE5

                xmlHttp = newActiveXObject("Microsoft.XMLHTTP");

          }

    };

    var xmlHttp = null;

    /**

     * 解析XML文件

     */

    xmlparser = function(method,xmlUrl) {

          if(null == xmlHttp){

                return "<br/>Error Reason: xmlHttp is null!";

          }

         

          //xmlhttp.onreadystatechange =state_Change;

          xmlHttp.open(method,xmlUrl,false);

          xmlHttp.send();

          returnxmlHttp.responseXML;

    };

    待解析XML文档:

    <?xml version="1.0" encoding="UTF-8"?

    >

    <!DOCTYPE product SYSTEM "product.dtd">

    <producttype>

        <product category="PHP">

            <id>1001</id>

            <no>NOC0001</no>

            <name>PHP高级设计教程</name>

           <price>88.99</price>

           <time>2015.12.30</time>

        </product>

        <product category="JAVA">

            <id>1002</id>

            <no>NOC0002</no>

            <name>Thinking inJava</name>

           <price>102.99</price>

           <time>2004.03.30</time>

        </product>

        <product category="WEB">

            <id>1003</id>

            <no>NOC0003</no>

            <name>WEB高级开发教程</name>

           <price>78.99</price>

           <time>2012.07.30</time>

        </product>

    </producttype>

    前端页面解析:

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <script src="__PUBLIC__/htmls/js/jquery-1.8.3.min.js"></script>

    <script src="__PUBLIC__/htmls/js/xmlparse.js"></script>

    </head>

    <body>

          <table id="tb_products"width="100%" border="0" cellspacing="15"cellpadding="0">

          </table>

         

          <br/>

          <a href="#" onclick="xmlParsePre();">点击我開始解析</a>

    </body>

    <script type="text/javascript">

          xmlParsePre = function(){

          // 解析

          var xmlUrl = "/Project/Study/View/XML/product.xml";

          var xmlDoc = xmlparser("GET",xmlUrl);

          if(null == xmlDoc){

                return;

          }

         

          // 获取

          var domElems =xmlDoc.getElementsByTagName("product");

          for(vari=0;i<domElems.length;i++) {

                var id =domElems[i].getElementsByTagName("id")

                            [0].childNodes[0].nodeValue;

                var no =domElems[i].getElementsByTagName("no")

                            [0].childNodes[0].nodeValue;

                var name =domElems[i].getElementsByTagName("name")

                            [0].childNodes[0].nodeValue;

                var price =domElems[i].getElementsByTagName("price")

                            [0].childNodes[0].nodeValue;

                var time =domElems[i].getElementsByTagName("time")

                            [0].childNodes[0].nodeValue;

               

                $("#tb_products").append("<tr><td>"+id+"</td><td>"+no+

                "</td><td>"+name+"</td><td>"+price+"</td><td>"+time+"</td></tr>");

          }

    };

    </script>

    </html>

    B、XML字符串解析:

    Js解析脚本:

    /**

     * 解析XML字符串

     */

    xmlparserStr = function(xmlStr) {

          var xmlDoc = null;

          if (window.DOMParser) {       // Other Explorer

                var parser = newDOMParser();

                xmlDoc =parser.parseFromString(xmlStr, "text/xml");

          } else                                   // InternetExplorer

          {

                xmlDoc = newActiveXObject("Microsoft.XMLDOM");

                xmlDoc.async = "false";

                xmlDoc.loadXML(xmlStr);

          }

         

          return xmlDoc;

    };

    待解析字符串:

    var xml = "<producttype>";

          xml += "<productcategory='PHP'><id>1001</id><no>NOC0001</no><name>PHP高级设计教程</name><price>88.99</price><time>2015.12.30</time></product>";

          xml += "<productcategory='JAVA'><id>1002</id><no>NOC0002</no><name>ThinkinginJava</name><price>102.99</price><time>2004.03.30</time></product>";

          xml += "<productcategory='WEB'><id>1003</id><no>NOC0003</no><name>WEB高级开发教程</name><price>78.99</price><time>2012.07.30</time></product>";

          xml += "</producttype>";

    前端调用解析:

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <script src="__PUBLIC__/htmls/js/jquery-1.8.3.min.js"></script>

    <script src="__PUBLIC__/htmls/js/xmlparse.js"></script>

    </head>

    <body>

          <table id="tb_products"width="100%" border="0" cellspacing="15"cellpadding="0">

          </table>

         

          <br/>

          <a href="#" onclick="xmlParsePre();">点击我開始解析</a>

    </body>

    <script type="text/javascript">

          xmlParsePre = function(){

         

          var xml = "<producttype>";

          xml += "<productcategory='PHP'><id>1001</id><no>NOC0001</no><name>PHP高级设计教程</name><price>88.99</price><time>2015.12.30</time></product>";

          xml += "<productcategory='JAVA'><id>1002</id><no>NOC0002</no><name>ThinkinginJava</name><price>102.99</price><time>2004.03.30</time></product>";

          xml += "<productcategory='WEB'><id>1003</id><no>NOC0003</no><name>WEB高级开发教程</name><price>78.99</price><time>2012.07.30</time></product>";

          xml += "</producttype>";

         

          // 解析

          var xmlDoc =xmlparserStr(xml);

         

          // 获取

          var domElems =xmlDoc.getElementsByTagName("product");

          for(vari=0;i<domElems.length;i++) {

                var id =domElems[i].getElementsByTagName("id")

                            [0].childNodes[0].nodeValue;

                var no =domElems[i].getElementsByTagName("no")

                            [0].childNodes[0].nodeValue;

                var name =domElems[i].getElementsByTagName("name")

                            [0].childNodes[0].nodeValue;

                var price =domElems[i].getElementsByTagName("price")

                            [0].childNodes[0].nodeValue;

                var time =domElems[i].getElementsByTagName("time")

                            [0].childNodes[0].nodeValue;

               

                $("#tb_products").append("<tr><td>"+id+"</td><td>"+no+

                "</td><td>"+name+"</td><td>"+price+"</td><td>"+time+"</td></tr>");

          }

    };

    </script>

    </html>

    上面的XML文件和字符串解析的结果同样,例如以下:

    2、待续…

    好了,到这里我们总结介绍了XML的基本知识、验证及解析显示。

       技术讨论群:489451956(新)






  • 相关阅读:
    最大子数组求和并进行条件组合覆盖测试
    Ubuntu 16.04 c++ Google框架单元测试
    The directory '/home/stone/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If execu
    Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
    个人博客作业三:微软小娜APP的案例分析
    补交 作业一
    补交 作业二:个人博客作业内容:需求分析
    嵌入式软件设计第12次实验报告
    嵌入式软件设计第11次实验报告
    嵌入式软件设计第10次实验报告
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7264028.html
Copyright © 2011-2022 走看看