XML基础及特殊字符转义 - 4

317 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

"良构"XML

所谓"良构"XML, 即是结构良好的XML.

"良构"XML具备以下特点:

  • 所有XML元素都成对出现, 都必须有开始标签和结束标签.
  • XML元素名称大小写敏感
  • XML必须正确的嵌套
  • 同级标签以相同的缩进进行对齐
  • 元素名称可以包含字母, 数字或其他的字符
  • 元素名称不能以数字或者标点符号开始
  • 元素名称中不能含空格

XML元素名称中不能有冒号, 除非它使用了命名空间.

XML命名空间

Namespace, 即命名空间, 用于减少XML元素名称的冲突, 有助于标准化元素和属性, 为它们加上唯一标识.

XML命名空间的语法为:

xmlns:[prefix]="[namespace URL]"
  • prefix是命名空间的别名
  • xmlns是保留属性

属性 vs 命名空间

属性也属于某个命名空间, 除非属性带有前缀, 否则的话, 它就属于所在元素所处的命名空间了.

命名空间用例可以如下:

<f:table xmlns:f="http://www.w3school.com.cn/furniture">
    <f:name>African CoffeeTable</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
</f:table>

元素<table>不仅仅有前缀信息, 还添加了一个xmlns属性, 其值是一个URI, 目的是为了唯一标识一个命名空间, 每一个URI都是不同的, 但基本上没有什么实际意义, 一般能连到一个网页, 这样取值就为前缀赋予了一个与某个命名空间相关联的限定名称.

实体, 文档类型声明和PCDATA

实体, 即ENTITY, 作用是避免重复输入, 相当于宏或者变量.

XML内置了5种实体, 也即之前讨论过的5种特殊字符, 即<, >, &, "'.

此外, 我们还可以自定义实体, 格式为:

<!DOCTYPE 根元素[ 
<!-- 实体声明 --> 
<!ENTITY name "conent"> 
]> 

使用已经声明过的实体: &name;

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sxt[ 
<!--  实体声明 --> 
<!ENTITY name "Bradly Cooper"> 
<!ENTITY gender "Unknown"> 
]>
<sxt> 
<teacher> 
<name>Bradly Cooper</name> 
<gender>Unknown</gender> 
</teacher> 
<!-- 引用实体的方法 --> 
<teacher> 
<name>&name;</name> 
<gender>&gen;</gender> 
</teacher> 
</sxt> 

文档类型声明, DocType Declaration, 紧跟 XML 声明之后, 包含所有实体声明. 格式如下:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE 根元素标记名[ 
<!-- 实体声明 --> 
]> 

PCDATA, Parsed Character Data, 已解析字符数据, 可把字符数据想象为XML元素的开始标签与结束标签之间的文本. PCDATA是会被解析器解析的文本. 这些文本将被解析器检查实体以及标记. 文本中的标签会被当作标记来处理, 而实体会被展开. 不过, 被解析的字符数据不应当包含任何&, <或者>字符. 需要使用&, <以及>的内置实体来分别替换它们.