zoukankan      html  css  js  c++  java
  • xml基础知识总结和回顾

    前几天在写js时,试图把XML DOM直接append到页面的元素中,试验和实践表明这是不行的,虽然xml dom和html dom都支持core dom的一些方法,都是文档树的节点,本质上比较相像,但是其实他们不能互相append到对方里面,需要解析出里面的内容,再做添加。

    经过这个问题,发现XML基础有点淡忘了,故又重新复习了一下。

    xml主要用来传输数据,而非显示数据,xml的标签都是自定义的,xml具有自我描述性,xml独立于软硬件平台
    xml和html为不同的目的而设计

    xml树结构
    xml声明,xml根元素,xml元素(元素节点 属性节点 文本节点)
    xml语法规则
    xml标签都必须关闭
    xml标签必须正确嵌套
    xml标签区分大小写
    xml文档必须有根元素
    xml属性值必须有引号(单引号 或 双引号)

    xml注释 和html注释方法一样 <!-- -->
    xml元素的内容:要不包含其他元素,要不包含文本,要不同时包含元素和文本
    xml元素的属性:在元素的开始标签中可以包含属性 类似 html,xml属性必须加引号(单引号或双引号皆可)类似 js,可用单引号或双引号括住字符串。我们可以根据需要把数据保存为元素的属性或元素的子元素
    元数据(有关数据的数据)应该存储为属性,而不是子元素。


    验证 XML 文档
    一个合法的 XML 文档是"形式良好"的 XML 文档,同样遵守文档类型定义 (DTD) 的语法规则:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE note SYSTEM "Note.dtd">
    <note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
    </note>  
    在上例中,DOCTYPE 声明是对外部 DTD 文件的引用


    XML Schema
    W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema:

    <xs:element name="note">

    <xs:complexType>
      <xs:sequence>
        <xs:element name="to"      type="xs:string"/>
        <xs:element name="from"    type="xs:string"/>
        <xs:element name="heading" type="xs:string"/>
        <xs:element name="body"    type="xs:string"/>
      </xs:sequence>
    </xs:complexType>

    </xs:element>
    如果您需要学习 XML Schema,

    几乎所有的主流浏览器均支持 XML 和 XSLT。

    XSLT 是首选的 XML 样式表语言。XSLT (eXtensible Stylesheet Language Transformations) 远比 CSS 更加完善

    大多数浏览器都有读取和操作xml的xml解析器,解析器把xml转换为javascript可访问的对象

    ie的xml解析器加载xml
    var xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); //创建空的xml文档对象
    xmlDoc.async="false";
    xmlDoc.load("note.xml"); //加载xml文件
    // xmlDoc.loadXML(xmlString); //加载xml格式的字符串

    firefox和其他浏览器的xml解析器加载xml
    var xmlDoc=document.implemetation.createDocument("","",null); //创建空的xml文档对象
    xmlDoc.async="false"; //关闭异步加载
    xmlDoc.load("note.xml"); //加载xml文件

    加载xml格式的字符串 如下:
    var parser=new DOMParser(); //创建dom解析器
    var doc=parser.parseFromString(txt,"text/xml"); //解析xml格式的字符串

    * ie使用loadXML方法来解析xml字符串,其他浏览器使用DOMParser对象


    跨域访问
    出于安全方面的原因,现代的浏览器不允许跨域的访问。

    这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。
    //解析xml文件的跨浏览器实现
    function parseXML(xmlFile){
     try{ //ie
        var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        }
     catch(e){ //firefox,safari,opera
        try{
            var xmlDoc=document.implementation.createDocument("","",null);
        }
        catch(e){
            alert(e.message);
            return;
        }
     }
     xmlDoc.async=false;
     xmlDoc.load(xmlFile);
    }
    //解析xml字符串的跨浏览器实现
    function parseXMLString(xmlStr){
        try{ //ie
            var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async=false;
            xmlDoc.loadXML(xmlStr);
        }
        catch(e){
            try{ //firefox,opera,chrome
                var parser=new DOMParser();
                var xmlDoc=parser.parseFromString(xmlStr,"text/xml");
            }
            catch(e){
                alert(e.message);
                return;
            }
        }
    }


    XMLHttpRequest 对象提供了在网页加载后与服务器进行通信的方法。
    XMLHttpRequest 对象是开发者的梦想,因为您能够:

    在不重新加载页面的情况下更新网页
    在页面已加载后从服务器请求数据
    在页面已加载后从服务器接收数据
    在后台向服务器发送数据
    所有现代的浏览器都支持 XMLHttpRequest 对象。

    XMLHttpRequest对象是ajax的核心

    XMLHttpRequest对象的创建:
    所有现代浏览器 包括ie7 (new 一下即可)
    xmlhttp=new XMLHttpRequest();

    ie5/6中需要通过ActiveXObject创建
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

    使用命名空间(Namespaces)
    这个 XML 文档携带着某个表格中的信息:

    <h:table xmlns:h="http://www.w3.org/TR/html4/">
       <h:tr>
       <h:td>Apples</h:td>
       <h:td>Bananas</h:td>
       </h:tr>
    </h:table>此 XML 文档携带着有关一件家具的信息:

    <f:table xmlns:f="http://www.w3school.com.cn/furniture">
       <f:name>African Coffee Table</f:name>
       <f:width>80</f:width>
       <f:length>120</f:length>
    </f:table>与仅仅使用前缀不同,我们为 <table> 标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。
    XML Namespace (xmlns) 属性
    XML 命名空间属性被放置于某个元素的开始标签之中,并使用以下的语法:

    xmlns:namespace-prefix="namespaceURI"当一个命名空间被定义在某个元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。


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

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

    转义字符
    非法的 XML 字符必须被替换为实体引用(entity reference)。

    假如您在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。因此你不能这样写:

    <message>if salary < 1000 then</message>为了避免此类错误,需要把字符 "<" 替换为实体引用,就像这样:

    <message>if salary &lt; 1000 then</message>

    CDATA 内部的所有东西都会被解析器忽略。CDATA 区段开始于 "<![CDATA[  ....  ]]>":
    关于 CDATA 区段的注释:

    CDATA 区段不能包含字符串 "]]>",所以,CDATA 区段的嵌套是不被允许的。

    同时也需要确保在 "]]>" 字符串中没有空格或折行。

    xml编码

    结论
    结论是:编码属性应当被指定为文档被保存时所使用的编码。我最好的避免错误的建议是:

    使用支持编码的编辑器
    确定编辑器使用的编码
    在您的 XML 文档中使用相同的编码属性



  • 相关阅读:
    tsm 存放磁带到带库
    tsm 切记
    添加路由时啥时候是dev啥时候是gw
    网卡上绑定多个IP地址
    更改本地环回地址引发的血案
    自学网络 arp_ignore/arp_announce
    do_try_to_free_pages
    如何用ssh实现端口的映射
    显示系统中所有的socket信息
    ifstat查看网络流量的原理
  • 原文地址:https://www.cnblogs.com/stephenykk/p/3090652.html
Copyright © 2011-2022 走看看