现在的位置: 首页 > 综合 > 正文

XML 学习总结(2)

2019年08月15日 ⁄ 综合 ⁄ 共 4377字 ⁄ 字号 评论关闭

XML 属性

XML 元素可以在开始标签中包含属性,类似 HTML

属性 (Attribute) 提供关于元素的额外(附加)信息。

属性通常提供不属于数据组成部分的信息。在下面的例子中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要

<file type="gif">computer.gif</file>

 

XML 属性必须加引号

属性值必须被引号包围,不过单引号和双引号均可使用。

注释如果属性值本身包含双引号,那么有必要使用单引号包围它,就像这个例子:

<gangster name='George "Shotgun" Ziegler'>

或者可以使用实体引用:

<gangster name="George "Shotgun" Ziegler">

 

XML 元素 vs. 属性

请看这些例子:

<person sex="female">

  <firstname>Anna</firstname>

  <lastname>Smith</lastname>

</person> 

<person>

  <sex>female</sex>

  <firstname>Anna</firstname>

  <lastname>Smith</lastname>

</person> 

在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。

没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。

 

我最喜欢的方式

下面的三个 XML 文档包含完全相同的信息:

第一个例子中使用了 date 属性:

<note date="08/08/2008">

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body>Don't forget the meeting!</body>

</note> 

第二个例子中使用了 date 元素:

<note>

<date>08/08/2008</date>

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body>Don't forget the meeting!</body>

</note> 

第三个例子中使用了扩展的 date 元素(这是我的最爱):

<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 属性?

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

· 属性无法包含多重的值(元素可以)

· 属性无法描述树结构(元素可以)

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

· 属性难以阅读和维护

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

不要做这样的蠢事(这不是 XML 应该被使用的方式):

<note day="08" month="08" year="2008"

to="George" from="John" heading="Reminder" 

body="Don't forget the meeting!">

</note>

 

针对元数据的 XML 属性

有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 ID 属性是一样的。这个例子向我们演示了这种情况:

<messages>

  <note id="501">

    <to>George</to>

    <from>John</from>

    <heading>Reminder</heading>

    <body>Don't forget the meeting!</body>

  </note>

  <note id="502">

    <to>John</to>

    <from>George</from>

    <heading>Re: Reminder</heading>

    <body>I will not</body>

  </note> 

</messages>

上面的 ID 仅仅是一个标识符,用于标识不同的便签。它并不是签数据的组成部分。

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

 

XML 验证

拥有正确语法的 XML 被称为形式良好的 XML

通过 DTD 验证的 XML 合法的 XML

形式良好的 XML 文档

形式良好结构良好的 XML 文档拥有正确的语法。

形式良好Well Formed)的 XML 文档会遵守前几章介绍过的 XML 语法规则:

· XML 文档必须有根元素

· XML 文档必须有关闭标签

· XML 标签对大小写敏感

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

· XML 属性必须加引号

 

验证 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 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> 

 

XML 验证器

XML 错误会终止您的程序

XML 文档中的错误会终止你的 XML 程序。

W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性。

 

对您的 XML 进行语法检查

根据 DTD 来验证 XML

<?xml version="1.0" ?> 

<!DOCTYPE note [

  <!ELEMENT note (to,from,heading,body)>

  <!ELEMENT to      (#PCDATA)>

  <!ELEMENT from    (#PCDATA)>

  <!ELEMENT heading (#PCDATA)>

  <!ELEMENT body    (#PCDATA)>

]>

<note>

<to>George</to> 

<from>John</from> 

<heading>Reminder</heading> 

<body>Don't forget the meeting!</body> 

</note>

注释只有在 Internet Explorer 中,可以根据 DTD 来验证 XMLFirefox, Mozilla, Netscape 以及 Opera 做不到这一点。

 

XML 浏览器支持

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

 

查看 XML 文件

 

在所有现代浏览器中,均能够查看原始的 XML 文件。

 

不要指望 XML 文件会直接显示为 HTML 页面。

打开 XML 文件 - XML 文档将显示为代码颜色化的根以及子元素。通过点击元素左侧的加号或减号,可以展开或收起元素的结构。如需查看不带有 和 符号的源代码,请从浏览器菜单中选择查看源代码

注释:在 Netscape, Opera 以及 Safari 中,仅仅会显示元素文本!要查看原始的 XML,请右击页面,然后选择查看源代码

 

为什么 XML 会这样显示?

XML 文档不会携带有关如何显示数据的信息。

在没有任何有关如何显示数据的信息的情况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。

可以使用 CSSXSLJavaScript 以及 XML 数据岛等来格式化 XML 

使用 CSS 格式化 XML 不是常用的方法,更不能代表 XML 文档样式化的未来。W3C 推荐使用 XSLT

 

使用 XSLT 显示 XML(首选)

通过使用 XSLT,您可以向 XML 文档添加显示信息。

使用 XSLT 显示 XML

XSLT 是首选的 XML 样式表语言。

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

使用 XSLT 的方法之一是在浏览器显示 XML 文件之前,先把它转换为 HTML

在服务器上通过 XSLT 转换 XML

XSLT 转换由浏览器完成的,浏览器读取的是 XML 文件。

在使用 XSLT 来转换 XML 时,不同的浏览器可能会产生不同结果。为了减少这种问题,可以在服务器上进行 XSLT 转换。

请注意,不论转换由服务器还是由浏览器进行,输出结果完成相同。

 

待续。。。

抱歉!评论已关闭.