zoukankan      html  css  js  c++  java
  • XML的学习

    一、概念:XML(EXtensible Markup Language):可扩展标记语言

    二、作用(跟HTML的区别):XML:被设计用来结构化,用来传输和存储数据(HTML:用来显示数据。两者的侧重点都不一样。)

    举个例子:  

      <?xml version="1.0" encoding="UTF-8"?>#XML声明,可选(不是XML文档本身的一部分),若存在的话则需要放在第一行。
      <note>
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
      </note>

    上面这条便签具有自我描述性,它包含了发送者和接受者的信息,同时拥有标题以及消息主体。但是这个XML文档仍然没有做任何事情,该note只是包装在XML标签中的纯粹信息,我们需要编写软件或者程序,才能传送,接收和显示出这个文档。

    三、XML标签:

      1)XML标签没有被预定义,需要自行定义标签。

      2)所有的XML元素都必须有一个关闭标签(XML声明不是XML文档本身的一部分)。这个跟HTML有点不一样,HTML中有些标签是不用闭标签的,如<p>。

      3)XML 标签对大小写敏感,必须使用相同的大小写来编写打开标签和关闭标签。

    四、XML树结构:

      1)指的是标签之间的外层内层关系。

      2)XML文档必须有根元素(根标签):所有其他元素的父元素。

      3)XML 元素指的是从开始标签直到结束标签的部分(包括起终标签)。

    五、XML属性:

      1)XML元素的属性值必须加单/双引号:格式:<元素名 属性名1="属性值1">。如果属性值本身包含双引号,则用单引号,相反则反。

      2)特定的属性名称在同一个元素标记中只能出现一次。

      3)属性难以阅读和维护,应该尽量使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息。

    六、XML实体引用:如果把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。所以才会有XML实体引用:

    在 XML 中,有 5 个预定义的实体引用:

    实体引用            所要替代                       含义
     &lt;                           <                             小于
     &gt;                          >                             大于
     &amp;                     &                                且
     &apos;                     '                               单引号
     &quot;                      "                               双引号

    七、XML注释:<!--   -->

    八、XML元素的命名规则:

        1)名称可以包含字母,数字以及其他字符;
        2)名称不能以数字或者标点符号开始;
        3)名称不能以字母XML开始;
        4)名称不能包含空格。
        5)可使用任何名称,没有保留字词。
        6)建议:起具有描述性,简短的(下划线连接),避免’-‘’.‘’:‘这类字符的使用,很可能会直接造成别的歧义。

    九、空格与换行:

      1)HTML的空格问题:HTML中会把多个连续的空格字符裁减(合并)为一个。但是XML中,文档的空格不会被删减。

      2)换行:XML以LF存储换行。

    十、XMLHttpRequest

      1、XMLHttpRequest 对象用于在后台与服务器交换数据。

      2、XMLHttpRequest对象的优点:    

        1)在不重新加载页面的情况下更新网页
        2)在页面已加载后从服务器请求数据
        3)在页面已加载后从服务器接收数据
        4)在后台向服务器发送数据

      3、创建XMLHttpRequest对象的语法:xmlhttp=new XMLHttpRequest();

    十一、XML解析器:XML 解析器把 XML 文档转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象。

    十二、XSLT样式表语言:

      1、XML首选XSLT样式表语言显示XML,因为:

        1)XSLT(eXtensible Stylesheet Language Transformations)远比 CSS 更加完善。

        2)XSLT是在浏览器显示XML文件之前,先把它转换为 HTML:当浏览器读取XML文件时,XSLT 转换(可在服务器上完成)是由浏览器完成的。

    十三、使用CSS格式化XML:

      <?xml-stylesheet type="text/css" href="cd_catalog.css"?>#这个一般是跟在XML声明的后面,也就是第二行。其中cd_catalog.css文件是预先写好的css文件。

    十四、DOCTYPE声明对外部DTD文件的引用:<!DOCTYPE note SYSTEM "Note.dtd">

    十五、XML DOM(Document Object Model 文档对象模型)定义了访问和操作文档的标准方法。

      1)使用getElementsByTagName()方法从XML文档中取回数据。
        如获取元素值:检索第一个<title>元素的文本值:【假设实例使用的是books.xml】
        txt=xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;#元素的文本值都是一份,不存在元素的第几个子节点的文本值说法

      2)获取属性值:检索第一个 <title> 元素的 "lang" 属性的文本值:
        txt=xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");

      3)改变元素的值:改变第一个 <title> 元素的文本值:
        x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];#获得该元素
        x.nodeValue="Easy Cooking";#将该元素的文本值属性更改。

      4)创建新的属性:创建一个新的属性(edition="first"),然后把它添加到每一个 <book> 元素中:
        x=xmlDoc.getElementsByTagName("book");#获得xml文件中的所有book元素。
        for(i=0;i<x.length;i++)
        {
          x[i].setAttribute("edition","first");#setAttribute()方法可用于改变现有的属性值,或创建一个新的属性
        }
      5)创建新的元素:createElement()方法用于创建一个新的元素节点。createTextNode()方法用于创建一个新的文本节点。appendChild() 方法用于向节点添加子节点(在最后一个子节点之后)。如需创建带有文本内容的新元素,需要同时创建元一个新的元素节点和一个新的文本节点,然后把他追加到现有的节点。
      如:创建了一个新的元素(<edition>),带有如下文本:First,然后把它添加到第一个 <book> 元素:
        newel=xmlDoc.createElement("edition");#创建一个 <edition> 元素
        newtext=xmlDoc.createTextNode("First");#创建值为 "First" 的文本节点newtext
        newel.appendChild(newtext);向元素节点<edition>添文本节点内容First
        x=xmlDoc.getElementsByTagName("book");#从XML文件中获取book元素
        x[0].appendChild(newel);#将<edition>节点添加为第一个book元素的子元素。

      6)删除元素:如删除第一个 <book> 元素的第一个节点:
        x=xmlDoc.getElementsByTagName("book")[0];
        x.removeChild(x.childNodes[0]);

    十六、XML文档实例:在HTML div元素中显示 "cd_catalog.xml" 文件(此处默认已经写好,并放置相应的目录上)的第一个CD

      <!DOCTYPE html>
      <html>
      <head>

      <script>
      #把 XML 文档解析到 XML DOM 对象中(可通过 JavaScript 操作的对象)。不同浏览器创建XMLHttpRequest对象的方式不同
      if (window.XMLHttpRequest)
      {  // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
      }
      else
      {  // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      #建一个新的http请求,建立与服务器的连接,并指定此请求的方法:GET、URL(可以是绝对地址也可以是相对地址)、false(可选参数):指定该请求不是异步方式。默认为异步方式true。
      xmlhttp.open("GET","cd_catalog.xml",false);
      #Get是向服务器发索取数据的一种请求(用于获取/查询资源信息),而Post是向服务器提交数据的一种请求(用于更新资源信息)
      xmlhttp.send();#建立了连接就发送请求。这里涉及到'GET'、'POST'的区别,如果是'POST'的话,就写成:xmlhttp.send(url)
      #返回一个包含请求检索的HTML或XML的Document,如果请求未成功,尚未发送,或者检索的数据无法正确解析为XML或HTML,则为null。简单点说:就是说拿到了所请求的文档。
      xmlDoc=xmlhttp.responseXML;

      x=xmlDoc.getElementsByTagName("CD");#获得该文档中的所有元素名为"CD"的部分。
      i=0;#这个编号是记录对应所请求到的文档的第几个"CD"元素

      function displayCD()
      {
        #getElementsByTagName():返回的是一个数组,所以必须指定数组索引为[0]。下面这语句表示:获取第一个<ARTIST>元素的文本值
        artist=(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
        title=(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
        year=(x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue);
        txt="Artist: " + artist + "<br>Title: " + title + "<br>Year: "+ year;#得到的内容
        #document.getElementById(" ") 得到的是一个对象。innerHTML在JS是双向功能:获取对象的内容 或 向对象插入内容:
        #下面意思是:获取id为showCD的对象的内嵌内容,或者说是:向id为showCD的对象插入内容txt。
        document.getElementById("showCD").innerHTML=txt;
      }
      #导航功能函数
      function next()
      {
        if (i<x.length-1){
          i++; displayCD();
        }
      }

      function previous()
      {
        if (i>0){
          i--; displayCD();
        }
      }
      </script>
      </head>
      <body onload="displayCD()">#onload事件:在页面载入完成后立即触发,displayCD()就是事件发生后指定的要执行的JavaScript。

      <div id='showCD'></div><br>
      <input type="button" onclick="previous()" value="<<" />
      <input type="button" onclick="next()" value=">>" />

      </body>
      </html>

    十七、XML命名空间:提供了一种避免元素命名冲突的方法:可以使用前缀来解决。使用前缀,必须得定义用于前缀的命名空间:命名空间是在元素的开始标签的xmlns属性中定义的,语法为:xmlns:前缀="url"。举个例子:

      <h:table xmlns:h="http://www.w3.org/TR/html4/"> (命名空间的URI不会被解析器用于查找信息。)

    当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。另外,命名空间,可以在他们被使用的元素中或者在 XML 根元素中声明。

    十八、解析字符数据(PCDATA)和未解析字符数据CDATA:

      1、解析字符数据(PCDATA):XML解析器通常会解析XML文档中所有的文本。(当某个 XML 元素被解析时,其标签之间的文本也会被解析)

      2、CDATA:未解析字符数据:该部分的文本会被解析器忽略。

        1)CDATA块的作用:可以避免解析器将一些'在XML元素中是非法的字符,如'<''&'等'直接解析,影响本身所要表达的内容。例如一个JavaScript代码中就包含着许多XML元素非法字符'<''&'之类的,为了避免解析错误,可以直接将脚本代码定义为CDATA:
        CDATA部分由 "<![CDATA[" 开始,由 "]]>" 结束,CDATA 部分中的所有内容都会被解析器忽略。如:
          <script>
          <![CDATA[
          function matchwo(a,b)
          {
            if (a < b && a < 0) then
            {return 1;}
            else

            {return 0;}
          }
          ]]>
          </script>
        2)注意:CDATA部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。标记 CDATA 部分结尾的 "]]>" 不能包含空格或换行。

    十九、XML 数据岛:XML数据岛是嵌入到 HTML 页面中的 XML 数据。只是在 Internet Explorer 浏览器中有效,所以要尽量避免使用。

  • 相关阅读:
    C# 读写ini文件
    How to Create DLL(Dynamic link library)
    运算符优先级
    汇编指令:lea
    AT&T汇编语法与x86语法基本区别
    栈的生长方向理解
    Mac Mojave 10.14.5安装python tesserocr
    一台电脑发布多个网站
    局域网内电脑之间互相访问网站
    判断两个对象是否相等——javascript实现
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/12123749.html
Copyright © 2011-2022 走看看