分享

XML高级(命名空间、CDATA、编码)

 herowuking 2014-03-12

 一、XML 命名空间(XML Namespaces

XML 命名空间提供避免元素命名冲突的方法。

命名冲突

XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。

假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的

元素,就会发生命名冲突。

XML 解析器无法确定如何处理这类冲突。

使用前缀来避免命名冲突

 

table>

通过使用前缀,创建了两种不同类型的

元素。

使用命名空间(Namespaces)来避免命名冲突

这个 XML 文档携带着某个表格中的信息:

标签添加一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。

xmlns:h="http://www./TR/表格">>

xmlns:f="http://www./家具">>

XML Namespace (xmlns) 属性

XML 命名空间属性被放置于元素的开始标签之中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。

xmlns:namespace-prefix="namespaceURI"

注释用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。

统一资源标识符(Uniform Resource Identifier (URI)

一串可以标识因特网资源字符

最常用的 URI 是用来标示因特网域名地址的统一资源定位器(URL)

另一个不那么常用的 URI 统一资源命名(URN)

默认的命名空间(Default Namespaces

为元素定义默认的命名空间可以省去在所有的子元素中使用前缀的工作。

命名空间的实际应用

XSL 样式表用于将 XML 文档转换为其他格式,比如 HTML

XSL 文档中,非 HTML 的标签都有前缀 xsl,并由某命名空间标示。

 

二、XML CDATA

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

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

PCDATA

PCDATA 指的是被解析的字符数据Parsed Character Data)。

当某个 XML 元素被解析时,其标签之间的文本也会被解析:

此文本也会被解析

因为 XML 元素可包含其他元素,就像 元素包含着另外的两个元素(first last)

BillGates

而解析器会把它分解为像这样的子元素:

 

Bill

Gates

 

CDATA

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

CDATA 部分由 "" 开始,由 "" 结束:

CDATA 部分中的所有内容都会被解析器忽略

XML 元素中,"<" "&" 非法的。

"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。

"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量 "<" "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA

 

上例中,解析器会忽略 CDATA 部分中的所有内容。

关于 CDATA 部分的注释:

CDATA 部分不能包含字符串 "]]>"

不允许嵌套 CDATA 部分。

标记 CDATA 部分结尾的 "]]>" 不能含空格或折行

 

三、XML 编码

XML 文档可以包含非 ASCII 字符,比如法语。

为了避免错误,需要规定 XML 编码,或者将 XML 文档存为 Unicode

Windows 记事本

Windows 记事本默认会将文件保存为单字节的 ANSI (ASCII)

可以另存为规定双字节 Unicode (UTF-16)

1>将不包含任何 encoding 属性的 XML 文件保存为 Unicode

(若规定了单字节就会出错.)

<?xml version="1.0"?>

<note>

<from>John</from>

<to>George</to>

<message>French: êèé</message>

</note>

下面的编码,不会报错:

<?xml version="1.0" encoding="windows-1252"?>

<?xml version="1.0" encoding="ISO-8859-1"?>

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

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

错误消息

如果试图 IE 中载入 XML 文档,可能会得到两种指示编码问题的错误:

在文本内容中发现非法字符

XML 文档中的某个字符与编码属性不匹配

1.XML 文件中含有外国字符,且当文件使用类似记事本的单字节编码编辑器保存,以及没有指定编码属性时,就会得到这个错误消息。

将当前编码切换为不被支持的指定编码

编码属性保存编码不匹配.

1.文件被保存为 Unicode/UTF-16,但是编码属性被指定为单字节编码(比如 Windows-1252ISO-8859-1 或者 UTF-8)。

2.文档被保存为单字节编码,但编码属性被指定为双字节编码(比如 UTF-16)。

结论

编码属性应当被指定为文档被保存时所使用的编码

最好的避免错误的建议是:

使用支持编码的编辑器

确定编辑器使用的编码

XML 文档中使用相同的编码属性

 

 

 

 

 

 

 

 

 

 

  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多