mobile wallpaper 1
mobile wallpaper 2
mobile wallpaper 3
mobile wallpaper 4
mobile wallpaper 5
mobile wallpaper 6
3295 字
9 分钟
xml学习(未完待续)
2025-12-01

介绍#

XML 指可扩展标记语言(eXtensible Markup Language)。被设计用来传输和存储数据,不用于表现和展示数据,而HTML 则用来表现数据。是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。

XML特点:

  • ML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 是一种很像HTML的标记语言。
  • XML 的设计宗旨是传输数据,而不是显示数据。
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准。
  • XML 是独立于软件和硬件的信息传输工具。

XML 和 HTML 区别:

  • XML 不是 HTML 的替代。
  • XML 和 HTML 为不同的目的而设计:
    • HTML 被设计用来显示数据,其焦点是数据的外观。XML 被设计用来传输和存储数据,其焦点是数据的内容。
    • HTML 旨在显示信息,而 XML 旨在传输信息。
    • HTML 中使用的标签都是预定义的。
    • HTML 中使用的标签都是预定义的。XML 语言没有预定义的标签; 允许创作者定义自己的标签和自己的文档结构

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

  • XML把数据从HTML分离
  • XML简化数据共享
  • 简化数据传输
  • 简化平台变更
  • 使数据更有用
  • 用于创建新的互联网语言

所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:

  • 元素
  • 属性
  • 实体
  • PCDATA(parsed character data,解析字符数据)
  • CDATA (character data,字符数据)

XML语法#

XML 文档形成了一种树结构,它从”根部”开始,然后扩展到”枝叶”。
XML 文档必须包含根元素;该元素是所有其他元素的父元素;所有的元素都可以有子元素;父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹);所有的元素都可以有文本内容和属性(类似 HTML 中)

XML 声明 XML 声明文件的可选部分,如果存在需要放在文档的第一行

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

XML根元素 XML 必须包含根元素,它是所有其他元素的父元素

<root>
<child>
<subchild>.....</subchild>
</child>
</root>

XML文档由元素构成,每个元素包括开始标签、结束标签和元素内容。

属性 元素可以包含属性,属性提供有关元素的附加信息。属性位于开始标签中。

<person age="30" gender="male">John Doe</person>

单标签 所有的 XML 元素一般都有一个关闭标签,但也允许单标签的使用的

<elementName attribute="value" />

单标签是指在一个标签中同时包含了开始和结束标签,形式类似于 HTML 中的空元素标签。
在XML中,你可以使用以下两种方式表示单标签:
使用空元素标签:

<exampleTag />

使用开始和结束标签,但是不包含任何内容:

<exampleTag></exampleTag>

XML 标签对大小写敏感。标签 <Letter> 与标签 <letter> 是不同的。必须使用相同的大小写来编写打开标签和关闭标签

实体引用 在 XML 中,一些字符拥有特殊的意义。
如果您把字符 ”<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始
这样会产生 XML 错误: <message>if salary < 1000 then</message>
用实体引用来代替 ”<” 字符:<message>if salary &lt; 1000 then</message>

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

  • &lt; 表示 <
  • &gt; 表示 >
  • &amp; 表示 &
  • &apos; 表示 ‘
  • &quot; 表示 ”

存储换行

  • 在 Windows 应用程序中,换行通常以一对字符来存储:回车符(CR)和换行符(LF)。
  • 在 Unix 和 Mac OSX 中,使用 LF 来存储新行。
  • 在旧的 Mac 系统中,使用 CR 来存储新行。
  • XML 以 LF 存储换行

XML元素#

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

一个元素可以包含:

  • 其他元素
  • 文本
  • 属性
  • 或混合以上所有

命名规则

XML 元素必须遵循以下命名规则:

  • 名称可以包含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字母 xml(或者 XML、Xml 等等)开始
  • 名称不能包含空格

最佳命名习惯

  • 使名称具有描述性。使用下划线的名称也很不错:<first_name>、<last_name>。
  • 名称应简短和简单,比如:<book_title>,而不是:<the_title_of_the_book>。
  • 避免 ”-” 字符。如果您按照这样的方式进行命名:“first-name”,一些软件会认为您想要从 first 里边减去 name。
  • 避免 ”.” 字符。如果您按照这样的方式进行命名:“first.name”,一些软件会认为 “name” 是对象 “first” 的属性。
  • 避免 ”:” 字符。冒号会被转换为命名空间来使用。
  • XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的命名规则来命名 XML 文档中的元素。
  • 在 XML 中,éòá 等非英语字母是完全合法的,不过需要留意,您的软件供应商不支持这些字符时可能出现的问题

XML 元素是可扩展,以携带更多的信息 XML 的优势之一,就是可以在不中断应用程序的情况下进行扩展。

XML属性#

XML元素具有属性,属性(Attribute)提供有关元素的额外信息。 xml属性值使用单引号或者双引号均可,但属性值必须加引号

在XML中尽量避免使用属性 尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息 因使用属性而引起的一些问题:

  • 属性不能包含多个值(元素可以)
  • 属性不能包含树结构(元素可以)
  • 属性不容易扩展(为未来的变化)
  • 属性难以阅读和维护

XML 实体#

XML 实体是一种占位符机制,用于在 XML 文档中引用预定义的内容。可以把它理解为“变量”或“宏”,在解析时会被替换为实际的内容。

实体允许:

  • 引用特殊字符(如 <>&
  • 重复使用常用内容片段
  • 引用外部文件内容
  • 在 DTD 中定义可替换的内容

实体语法: 实体由三部分组成

  • & 实体引用的开始标记
  • 实体名称 实体的标识符
  • ; 实体引用的结束标记

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

  • &lt; 表示 <
  • &gt; 表示 >
  • &amp; 表示 &
  • &apos; 表示 ‘
  • &quot; 表示 “

XML PCDATA#

PCDATAParsed Character Data可解析字符数据

PCDATA 指的是会被 XML 解析器处理的文本内容。当解析器遇到 PCDATA 时,会:

  1. 解析其中的实体引用(如 &lt; 会被转换为 <
  2. 解析其中的元素标签(如果包含子元素)
  3. 进行正常的 XML 语法检查

XML CDATA#

XML 文档中的所有文本均会被解析器解析。只有 CDATA 区段中的文本会被解析器忽略。

DATA 部分由 "" 结束

<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>

PCDATA 与 CDATA对比:

对比维度PCDATACDATA
全称Parsed Character DataCharacter Data
中文可解析字符数据字符数据(未解析)
实体解析会解析实体(如 <)不解析实体
标签解析会解析子标签不解析标签
使用场景元素内容(会被解析的文本)不需要解析的文本块(如代码示例)
语法直接写在元素中

示例对比:

<element>
<!-- PCDATA:&lt; 会被解析为 < -->
5 &lt; 10
</element>
<element>
<!-- CDATA:原样输出,不会解析 -->
<![CDATA[5 &lt; 10]]>
</element>

XML 命名空间#

当两个不同的文档使用相同的元素名时,就会发生命名冲突 在 XML 中的命名冲突可以通过使用名称前缀从而容易地避免。当在 XML 中使用前缀时,一个所谓的用于前缀的命名空间必须被定义。 命名空间是在元素的开始标签的 xmlns 属性中定义的。 命名空间声明的语法如下。xmlns:前缀="URI"

** 分散声明**:

<root>
<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>
<f:table xmlns:f="http://www.w3cschool.cc/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>

集中声明

<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3cschool.cc/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>

XML验证 (DTD)#

DTD(文档类型定义,Document Type Definition,DTD)的作用是定义 XML 文档的合法构建模块。

使用DTD:

  • 通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。
  • 通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
  • 应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。
  • 还可以使用 DTD 来验证自身的数据。

DTD使用#

DTD 有两种方式使用:内部声明和外部引用

内部声明 语法: <!DOCTYPE root-element [element-declarations]> 示例:

<?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>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

其中DTD内容表示:

  • !DOCTYPE note (第二行)定义此文档是 note 类型的文档。
  • !ELEMENT note (第三行)定义 note 元素有四个元素:“to、from、heading,、body”
  • !ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型
  • !ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型
  • !ELEMENT heading (第六行)定义 heading 元素为 “#PCDATA” 类型
  • !ELEMENT body (第七行)定义 body 元素为 “#PCDATA” 类型

外部引用 语法:<!DOCTYPE root-element SYSTEM "filename"> 示例: xml文件:.xml

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

DTD文件:.dtd

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

DTD写法#

元素#

声明元素

<!ELEMENT element-name category>
<!ELEMENT element-name (element-content)>

空元素

<!ELEMENT element-name EMPTY>

只有PCDATA元素

<!ELEMENT element-name (#PCDATA)>

带任何内容元素

<!ELEMENT element-name ANY>

带子元素(序列)的元素

<!ELEMENT element-name (child1)>
<!ELEMENT element-name (child1,child2,...)>

当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。

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

** 声明只出现一次的元素**

<!ELEMENT element-name (child-name)>

** 声明最少出现一次的元素** 使用**+**号

<!ELEMENT element-name (child-name+)>

声明出现零次或多次的元素

<!ELEMENT element-name (child-name*)>

声明出现零次或一次的元素

<!ELEMENT element-name (child-name?)>

**声明“非…即…”类型的内容

<!ELEMENT note (to,from,header,(message|body))>

**声明混合型的内容

<!ELEMENT note (#PCDATA|to|from|header|message)*>

属性#

在 DTD 中,属性通过 ATTLIST 声明来进行声明。

声明属性

<!ATTLIST element-name attribute-name attribute-type attribute-value>

属性类型:

类型描述
CDATA值为字符数据 (character data)
(en1en2
ID值为唯一的 id
IDREF值为另外一个元素的 id
IDREFS值为其他 id 的列表
NMTOKEN值为合法的 XML 名称
NMTOKENS值为合法的 XML 名称的列表
ENTITY值是一个实体
ENTITIES值是一个实体列表
NOTATION此值是符号的名称
xml:值是一个预定义的 XML 值

属性值:

解释
属性的默认值
#REQUIRED属性值是必需的
#IMPLIED属性不是必需的
#FIXED value属性值是固定的

** 默认属性值**

<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">

#REQUIRED 必需的

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>

#IMPLIED 不是必需的

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

FIXED 固定的

<!ATTLIST element-name attribute-name attribute-type #FIXED "value">

列举属性值

<!ATTLIST element-name attribute-name (en1|en2|..) default-value>

实体#

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。 实体引用是对实体的引用。 实体可在内部或外部进行声明。

内部实体声明

<!ENTITY entity-name "entity-value">

外部实体声明

<!ENTITY entity-name SYSTEM "URI/URL">

XML Schema#

XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 可描述 XML 文档的结构。 XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。

XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。

XML Schema):

  • 定义可出现在文档中的元素
  • 定义可出现在文档中的属性
  • 定义哪个元素是子元素
  • 定义子元素的次序
  • 定义子元素的数目
  • 定义元素是否为空,或者是否可包含文本
  • 定义元素和属性的数据类型
  • 定义元素和属性的默认值以及固定值

XML 对数据类型的支持

  • 可更容易地描述允许的文档内容
  • 可更容易地验证数据的正确性
  • 可更容易地与来自数据库的数据一并工作
  • 可更容易地定义数据约束(data facets)
  • 可更容易地定义数据模型(或称数据格式)
  • 可更容易地在不同的数据类型间转换数据

XML schema元素#

未完待续#

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

xml学习(未完待续)
https://niushaoxiong.top/posts/xml/
作者
一只捡星星的熊
发布于
2025-12-01
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录