118

我是 XML 新手,我正在尝试了解基础知识。我在“Learning XML”中阅读了下面的行,但对我来说仍然不清楚。有人可以指出我清楚地解释这些基础知识的书或网站吗?

学习 XML

XML 声明描述了文档的一些最通用的属性,告诉 XML 处理器它需要一个 XML 解析器来解释这个文档。

这是什么意思?

我理解这xml version部分 - 文档和文档用户都应该在同一版本的 XML 中“交谈”。但是那encoding部分呢?为什么这是必要的?

4

6 回答 6

136

要了解“编码”属性,您必须了解bytescharacters之间的区别。

将字节视为 0 到 255 之间的数字,而字符则是“a”、“1”和“Ä”之类的东西。所有可用字符的集合称为字符集

每个字符都有一个或多个字节序列,用于表示它;但是,字节的确切数量和值取决于所使用的编码,并且有许多不同的编码。

大多数编码基于旧的字符集和称为 ASCII 的编码,每个字符一个字节(实际上只有 7 位),包含 128 个字符,包括美国英语中使用的许多常见字符。

例如,这里有 ASCII 字符集中的 6 个字符,由值 60 到 65 表示。

Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       ║
║  62  ║      >       ║
║  63  ║      ?       ║
║  64  ║      @       ║
║  65  ║      A       ║
╚══════╩══════════════╝

在完整的 ASCII 集中,使用的最低值是 0,最高的是 127(这两个都是隐藏的控制字符)。

但是,一旦您开始需要比基本 ASCII 提供的字符更多的字符(例如,带有重音符号的字母、货币符号、图形符号等),ASCII 就不再合适,您需要更广泛的字符。您需要更多字符(不同的字符集)并且需要不同的编码,因为 128 个字符不足以容纳所有字符。某些编码提供一个字节(256 个字符)或最多六个字节。

随着时间的推移,已经创建了许多编码。在 Windows 世界中,有 CP1252 或 ISO-8859-1,而 Linux 用户倾向于使用 UTF-8。Java 本机使用 UTF-16 [见评论]。

一种编码中字符的一个字节值序列可能代表另一种编码中完全不同的字符,甚至可能无效。

例如,在ISO 8859-1中,â由一个字节 value 表示226,而在UTF-8中它是两个字节:195, 162. 但是,在ISO 8859-1中,195, 162将是两个字符Ã、¢

将 XML 视为不是字符序列,而是字节序列。

想象一下接收 XML 的系统会看到字节195, 162。它怎么知道这些是什么字符?

为了让系统将这些字节解释为实际字符(并因此显示它们或将它们转换为另一种编码),它需要知道 XML 中使用的编码。

由于大多数常见的编码都与 ASCII 兼容,就基本的字母字符和符号而言,在这些情况下,声明本身可以不使用仅使用 ASCII 字符来说明编码是什么。在其他情况下,解析器必须尝试找出声明的编码。因为它知道声明以它开头,<?xml所以这样做要容易得多。

最后,该version属性指定 XML 版本,目前有两个(参见Wikipedia XML 版本。版本之间存在细微差别,因此 XML 解析器需要知道它正在处理什么。在大多数情况下(对于英语无论如何扬声器),1.0版就足够了。

于 2014-12-10T10:18:22.803 回答
29

并非所有 XML 文档都需要 XML 声明;但是,强烈建议 XHTML 文档作者在其所有文档中使用 XML 声明。当文档的字符编码不是默认的 UTF-8 或 UTF-16 并且没有由更高级别的协议确定编码时,需要这样的声明。这是一个 XHTML 文档的示例。在此示例中,包含 XML 声明。

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://example.org/">example.org</a>.</p>
 </body>
</html>

请参阅XML 的 W3 标准

于 2012-12-06T13:08:11.557 回答
4

这是 XML可选序言。

  • version="1.0"表示这是此文件符合的 XML 标准
  • encoding="utf-8"表示文件使用 UTF-8 Unicode 编码进行编码
于 2012-12-06T12:06:21.257 回答
4

编码声明标识了使用哪种编码来表示文档中的字符。

更多关于XML 声明的信息:http : //msdn.microsoft.com/en-us/library/ms256048.aspx

于 2012-12-06T12:06:33.310 回答
3

有人可以指出我清楚地解释这些基础知识的书或网站吗?

您可以通过示例查看此XML 教程

但是编码部分呢?为什么这是必要的?

W3C 提供了关于编码的解释:

“XML 和 HTML 4.0 的文档字符集是 Unicode(又名 ISO 10646)。这意味着 HTML 浏览器和 XML 处理器的行为应该就像它们在内部使用 Unicode。但这并不意味着文档必须以 Unicode 传输。只要客户端和服务器在编码上达成一致,他们就可以使用任何可以转换为 Unicode 的编码……”

于 2014-07-20T06:15:31.250 回答
-1

文档映射中的 XML 声明包含以下内容:

The version number, ?xml version="1.0"?. 

这是强制性的。尽管对于 XML 的未来版本,该数字可能会发生变化,但 1.0 是当前版本。

编码声明,

encoding="UTF-8"?

这是可选的。如果使用,编码声明必须紧跟在 XML 声明中的版本信息之后,并且必须包含一个表示现有字符编码的值。

于 2013-04-27T17:06:20.667 回答