XML

2019-07-09  本文已影响0人  上山走18398

XML

xml只可扩展标记语言
~~xml被设计用来传输和存储数据~~ 
xml的设计宗旨是传输数据,而不是显示数据
xml标签未自定义,需要自定义
xml具有自我描述性

验证器的使用
dtd: documention type define
xs: XML Schema
xslt: extensible stylesheet language transformation

XML Namespace (xmlns) 
统一资源标识符(Uniform Resource Identifier (URI))
统一资源标识符是一串可以标识因特网资源的字符。最常用的 
URI 是用来标示因特网域名地址的统一资源定位器(URL)。
另一个不那么常用的 URI 是统一资源命名(URN)。在我们的例子中,我们仅使用 URL。

xml和HTML的差异

为不同目的而设计
xml被设计为传输和存储数据,其焦点是数据的内容
HTML被设计用来显示数据,其焦点是数据的外观
HTML显示信息,XML传输信息
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>DObkfkssfsdfjs </body>
</note>

//上述这条便签,标签自定义,具有自我描述性,也未做任何事情
xml被设计用来结构化,存储以及传输信息

XML 仅仅是纯文本,没有任何行为

XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML。

对 XML 最好的描述是:

XML 是独立于软件和硬件的信息传输工具。

XML 的用途

XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。

xml把数据从HTML分离:
让HTML专注页面布局,需要数据时读取xml文档

xml简化数据共享:
xml数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法

xml简化数据传输
在不兼容的系统之间交换数据,数据统一xml文档(有其他统一个简化格式都行)

xml使页面在不同设备之间,平台系统之间传输有统一的数据格式,便于读取

xml树结构

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

eg.1
<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title> 
  <author>Giada De Laurentiis</author> 
  <year>2005</year> 
  <price>30.00</price> 
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore>

//书店有3类书,每本书包含名字 作者 价格 出版时间

xml语法规则

1. 所有 XML 元素都须有关闭标签

2. XML 标签对大小写敏感

3. XML 必须正确地嵌套

4. XML 文档必须有根元素

5. XML 的属性值须加引号

6. 实体引用
<message>if salary < 1000 then</message>

为了避免这个错误,请用实体引用来代替 "<" 字符:

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

7. XML 中的注释
<!-- This is a comment --> 

8. 在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个

9. XML 以 LF 存储换行(LF为换行符)

xml元素(与HTML类似)

xml命名规则

1. 名称可以含字母、数字以及其他的字符
2. 名称不能以数字或者标点符号开始
3. 名称不能以字符 “xml”(或者 XML、Xml)开始
4. 名称不能包含空格

有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。

XML 元素是可扩展的

,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。

//eg1
<note>
<date>
  <day>08</day>
  <month>08</month>
  <year>2008</year>
</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

避免 XML 属性?

因使用属性而引起的一些问题:

属性无法包含多重的值(元素可以)
属性无法描述树结构(元素可以)
属性不易扩展(为未来的变化)
属性难以阅读和维护



最佳命名习惯

使名称具有描述性。使用下划线的名称也很不错。

名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>。

避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为你需要提取第一个单词。

避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。

避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。

XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。

非英语的字母比如 éòá 也是合法的 XML 元素名,不过需要留意当软件开发商不支持这些字符时可能出现的问题。

在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

XML验证

形式良好:

XML 文档必须有根元素
XML 文档必须有关闭标签
XML 标签对大小写敏感
XML 元素必须被正确的嵌套
XML 属性必须加引号

//遵守文档类型定义 (DTD) 的语法规则:
验证XML文档:
<?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 DTD 
//DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]> 

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> 

使用 CSS 显示 XML

使用 XSLT 显示 XML(推荐)

XMLHttpRequest 对象

XMLHttpRequest 对象用于在后台与服务器交换数据(不重新加载,异步请求接收)。
xmlhttp=new XMLHttpRequest(); //js code      
new ActiveXObject("Microsoft.XMLDOM");
new ActiveXObject("Microsoft.XMLHTTP");

XML解析器

xmlhttp=new XMLHttpRequest(); //js code      
new ActiveXObject("Microsoft.XMLDOM");
new ActiveXObject("Microsoft.XMLHTTP");
txt="<bookstore><book>";
txt=txt+"<title>Everyday Italian</title>";
txt=txt+"<author>Giada De Laurentiis</author>";
txt=txt+"<year>2005</year>";
txt=txt+"</book></bookstore>";

if (window.DOMParser)
  {
  parser=new DOMParser();  //++++++
  xmlDoc=parser.parseFromString(txt,"text/xml");
  }
else // Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async="false";
  xmlDoc.loadXML(txt);
  }



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

这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。

XML DOM

xmlDoc   nodeValue

//xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue
//这是因为 getElementsByTagName() 方法会返回包含所有 <from> 节点的数组。
    
HTML    
document.getElementById("to").innerHTML=

XML TO HTMl

通过解析器获取XML 然后写入HTML

XML应用程序

整个流程:

  1. 加载XML文档
//获得XMLHttpRequest对象
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","cd_catalog.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML //获得xml文档对象
  1. 在任意HTML元素中显示XML文档
x= xmlDoc.getElementsByTagName("CD")
i = 0
function displayCD()
{   //获得artist title year 的值
    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);
    //innerHTML的内容
    txt="Artist: " + artist + "<br />Title: " + title + "<br />Year: "+ year;
    document.getElementById("showCD").innerHTML=txt;
}

  1. 添加导航脚本
function next() //到达最后一个元素不显示任何东西
{
    if (i < x.length-1)
    {
        i++;
        displayCD();
    }
}
function previous() //到达第一个元素后不显示任何东西
{
    if (i>0)
    {
        i--;
        displayCD();
    }
}


XML 命名空间(XML Namespaces)

```
<table xmlns="http://www.w3.org/TR/html4/">

<table xmlns="http://www.w3school.com.cn/furniture">
//省去前缀的工作
//统一资源标识符(Uniform Resource Identifier (URI))
```

CDATA

术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。

不进行翻译 ,原文删除
所有 XML 文档中的文本均会被解析器解析。

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

PCDATA 指的是被解析的字符数据(Parsed Character Data)
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:

XML 编码

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

服务器上的 XML

XML 可在不安装任何 XML 软件的情况下在服务器端生成。

如需从服务器生成 XML 响应 - 只需简单地编写以下代码并在服务器上把它保存为一个 ASP 文件


<%
response.ContentType="text/xml"
response.Write("<?xml version='1.0' encoding='ISO-8859-1'?>")
response.Write("<note>")
response.Write("<from>John</from>")
response.Write("<to>George</to>")
response.Write("<message>Don't forget the meeting!</message>")
response.Write("</note>")
%>


从数据库获取 XML

XML 可在不安装任何 XML 软件的情况下从数据库生成。

如需从服务器生成 XML 数据库响应,只需简单地编写以下代码,并把它在服务器上保存为 ASP 文件


在服务器上通过 XSLT 转换 XML

引用:

http://www.w3school.com.cn/xml/

上一篇 下一篇

猜你喜欢

热点阅读