XML是什么
- XML 指可扩展标记语言(eXtensible Markup Language)
- XML 被设计用来传输和存储数据。
- XML 很重要,也很容易学习。
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准。
XML 是一种描述性语言,描述性语言特别适合做界面,故HTML(一种特殊的XML)会变成前端通用UI语言,Andorid也选择了XML做UI描述文件,IDEA软件也是选择XML做界面描述文件。描述性语言也特别时候做数据传输文件,描述数据组织格式,用于数据传输。当然有很多框架也选择使用XML这类的描述文件做模板引擎的功能,比如Mybatis使用XML存放SQL片段,Spring等框架用作放配置信息等。
一个 XML 文档实例
XML 文档使用简单的具有自我描述性的语法:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。
下一行描述文档的根元素(像在说:”本文档是一个便签”):
<note>
接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body):
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
最后一行定义根元素的结尾:
</note>
您可以假设,从这个实例中,XML 文档包含了一张 Jani 写给 Tove 的便签。
XML 文档形成一种树结构
XML 文档必须包含根元素。该元素是所有其他元素的父元素。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有的元素都可以有子元素:
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。
所有的元素都可以有文本内容和属性(类似 HTML 中)。
实例:
上图表示下面的 XML 中的一本书:
XML 文档实例
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
实例中的根元素是 。文档中的所有 元素都被包含在 中。
元素有 4 个子元素:、<author>、<year>、<price>。
<a name="Io3Do"></a></p>
<h1 id="6fh7lh"><a name="6fh7lh" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML语法</h1><p><a name="u39uw"></a></p>
<h2 id="15knfe"><a name="15knfe" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 文档必须有根元素</h2><p>XML 必须包含根元素,它是所有其他元素的父元素,比如以下实例中 root 就是根元素:</p>
<pre><code class="lang-xml"><root>
<child>
<subchild>.....</subchild>
</child>
</root>
</code></pre>
<p><a name="qLbih"></a></p>
<h2 id="afdhqh"><a name="afdhqh" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 声明</h2><p>XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:</p>
<pre><code class="lang-xml"><?xml version="1.0" encoding="utf-8"?>
</code></pre>
<p><a name="yVmQ4"></a></p>
<h2 id="e2qc74"><a name="e2qc74" class="reference-link"></a><span class="header-link octicon octicon-link"></span>所有的 XML 元素都必须有一个关闭标签</h2><p>在 HTML 中,某些元素不必有一个关闭标签:</p>
<pre><code class="lang-xml"><p>This is a paragraph.
<br>
</code></pre>
<p>在 XML 中,省略关闭标签是非法的。所有元素都<strong>必须</strong>有关闭标签:</p>
<pre><code class="lang-xml"><p>This is a paragraph.</p>
<br />
</code></pre>
<blockquote>
<p><strong>注意:</strong>从上面的实例中,您也许已经注意到 XML 声明没有关闭标签。这不是错误。声明不是 XML 文档本身的一部分,它没有关闭标签。</p>
</blockquote>
<p><a name="YXSlc"></a></p>
<h2 id="9bb9v7"><a name="9bb9v7" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 标签对大小写敏感</h2><p>XML 标签对大小写敏感。标签 <Letter> 与标签 <letter> 是不同的。<br />必须使用相同的大小写来编写打开标签和关闭标签:</p>
<pre><code class="lang-xml"><Message>这是错误的</message>
<message>这是正确的</message>
</code></pre>
<p><strong>注释:</strong>打开标签和关闭标签通常被称为开始标签和结束标签。不论您喜欢哪种术语,它们的概念都是相同的。
<a name="jZQ0s"></a></p>
<h2 id="fumjga"><a name="fumjga" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 必须正确嵌套</h2><p>在 HTML 中,常会看到没有正确嵌套的元素:</p>
<pre><code class="lang-xml"><b><i>This text is bold and italic</b></i>
</code></pre>
<p>在 XML 中,所有元素都<strong>必须</strong>彼此正确地嵌套:</p>
<pre><code class="lang-xml"><b><i>This text is bold and italic</i></b>
</code></pre>
<p>在上面的实例中,正确嵌套的意思是:由于 <i> 元素是在 <b> 元素内打开的,那么它必须在 <b> 元素内关闭。
<a name="WyU9T"></a></p>
<h2 id="14ps37"><a name="14ps37" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 属性值必须加引号</h2><p>与 HTML 类似,XML 元素也可拥有属性(名称/值的对)。<br />在 XML 中,XML 的属性值必须加引号。<br />请研究下面的两个 XML 文档。 第一个是错误的,第二个是正确的:</p>
<pre><code class="lang-xml"><note date=12/11/2007>
<to>Tove</to>
<from>Jani</from>
</note>
<note date="12/11/2007">
<to>Tove</to>
<from>Jani</from>
</note>
</code></pre>
<p>在第一个文档中的错误是,note 元素中的 date 属性没有加引号。</p>
<hr>
<p><a name="LThUX"></a></p>
<h2 id="7xtt69"><a name="7xtt69" class="reference-link"></a><span class="header-link octicon octicon-link"></span>实体引用</h2><p>在 XML 中,一些字符拥有特殊的意义。<br />如果您把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。<br />这样会产生 XML 错误:</p>
<pre><code class="lang-xml"><message>if salary < 1000 then</message>
</code></pre>
<p>为了避免这个错误,请用<strong>实体引用</strong>来代替 “<” 字符:</p>
<pre><code class="lang-xml"><message>if salary < 1000 then</message>
</code></pre>
<p>在 XML 中,有 5 个预定义的实体引用:</p>
<table>
<thead>
<tr>
<th><</th>
<th><</th>
<th>less than</th>
</tr>
</thead>
<tbody>
<tr>
<td>></td>
<td>></td>
<td>greater than</td>
</tr>
<tr>
<td>&</td>
<td>&</td>
<td>ampersand</td>
</tr>
<tr>
<td>'</td>
<td>‘</td>
<td>apostrophe</td>
</tr>
<tr>
<td>"</td>
<td>“</td>
<td>quotation mark</td>
</tr>
</tbody>
</table>
<p><strong>注释:</strong>在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
<a name="CLKDu"></a></p>
<h2 id="9t9tkv"><a name="9t9tkv" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 中的注释</h2><p>在 XML 中编写注释的语法与 HTML 的语法很相似。</p>
<pre><code class="lang-xml"><!-- This is a comment -->
</code></pre>
<p><a name="63dfN"></a></p>
<h2 id="bvp7l8"><a name="bvp7l8" class="reference-link"></a><span class="header-link octicon octicon-link"></span>在 XML 中,空格会被保留</h2><p>HTML 会把多个连续的空格字符裁减(合并)为一个:</p>
<table>
<thead>
<tr>
<th>HTML:</th>
<th>Hello Tove</th>
</tr>
</thead>
<tbody>
<tr>
<td>输出结果:</td>
<td>Hello Tove</td>
</tr>
</tbody>
</table>
<p>在 XML 中,文档中的空格不会被删减。
<a name="OY9qG"></a></p>
<h2 id="f9zl2i"><a name="f9zl2i" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 以 LF 存储换行</h2><ul>
<li>在 Windows 应用程序中,换行通常以一对字符来存储:回车符(CR)和换行符(LF)。</li><li>在 Unix 和 Mac OSX 中,使用 LF 来存储新行。</li><li>在旧的 Mac 系统中,使用 CR 来存储新行。</li><li>XML 以 LF 存储换行。
<a name="L2V03"></a><h1 id="33eprg"><a name="33eprg" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 元素</h1>在 HTML 中,属性提供有关元素的额外信息:<pre><code class="lang-xml"><img src="computer.gif">
<a href="demo.html">
</code></pre>
属性通常提供不属于数据组成部分的信息。在下面的实例中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:<pre><code class="lang-xml"><file type="gif">computer.gif</file>
</code></pre>
<a name="DwPE9"></a><h2 id="a6fe3u"><a name="a6fe3u" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 属性必须加引号</h2>属性值必须被引号包围,不过单引号和双引号均可使用。比如一个人的性别,person 元素可以这样写:<pre><code class="lang-xml"><person sex="female">
</code></pre>
或者这样也可以:<pre><code class="lang-xml"><person sex='female'>
</code></pre>
如果属性值本身包含双引号,您可以使用单引号,就像这个实例:<pre><code class="lang-xml"><gangster name='George "Shotgun" Ziegler'>
</code></pre>
或者您可以使用字符实体:<pre><code class="lang-xml"><gangster name="George "Shotgun" Ziegler">
</code></pre>
<a name="tO8JZ"></a><h2 id="f5pq4a"><a name="f5pq4a" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 元素 vs. 属性</h2>请看这些实例:
```xml<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
</li></ul>
<p><person></p>
<p><sex>female</sex></p>
<p><firstname>Anna</firstname></p>
<p><lastname>Smith</lastname>
</person></p>
<pre><code>在第一个实例中,sex 是一个属性。在第二个实例中,sex 是一个元素。这两个实例都提供相同的信息。<br />没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。
<a name="E7tyu"></a>
## 我最喜欢的方式
下面的三个 XML 文档包含完全相同的信息:<br />第一个实例中使用了 date 属性:
```xml
<note date="10/01/2008">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
</code></pre><p>第二个实例中使用了 date 元素:</p>
<pre><code class="lang-xml"><note>
<date>10/01/2008</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
</code></pre>
<p>第三个实例中使用了扩展的 date 元素(这是我的最爱):</p>
<pre><code class="lang-xml"><note>
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
</code></pre>
<p><a name="DGOrx"></a></p>
<h2 id="4awapq"><a name="4awapq" class="reference-link"></a><span class="header-link octicon octicon-link"></span>避免 XML 属性?</h2><p>因使用属性而引起的一些问题:</p>
<ul>
<li>属性不能包含多个值(元素可以)</li><li>属性不能包含树结构(元素可以)</li><li>属性不容易扩展(为未来的变化)</li></ul>
<p>属性难以阅读和维护。请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。<br />不要做这样的蠢事(这不是 XML 应该被使用的方式):</p>
<pre><code class="lang-xml"><note day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
</code></pre>
<p><a name="sDBj5"></a></p>
<h2 id="d673iq"><a name="d673iq" class="reference-link"></a><span class="header-link octicon octicon-link"></span>针对元数据的 XML 属性</h2><p>有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 id 属性是一样的。这个实例向我们演示了这种情况:</p>
<pre><code class="lang-xml"><messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
</code></pre>
<p>上面的 id 属性仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。<br />在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
<a name="QC7xh"></a></p>
<h1 id="2ql1dg"><a name="2ql1dg" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 验证</h1><p>拥有正确语法的 XML 被称为”形式良好”的 XML。<br />通过 DTD 验证的XML是”合法”的 XML。
<a name="HYCPL"></a></p>
<h2 id="akl5za"><a name="akl5za" class="reference-link"></a><span class="header-link octicon octicon-link"></span>形式良好的 XML 文档</h2><p>“形式良好”的 XML 文档拥有正确的语法。<br />在前面的章节描述的语法规则:</p>
<ul>
<li>XML 文档必须有一个根元素</li><li>XML元素都必须有一个关闭标签</li><li>XML 标签对大小写敏感</li><li>XML 元素必须被正确的嵌套</li><li>XML 属性值必须加引号<pre><code class="lang-xml"><?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
</code></pre>
<a name="LALhs"></a><h2 id="iwby0"><a name="iwby0" class="reference-link"></a><span class="header-link octicon octicon-link"></span>验证 XML 文档</h2>合法的 XML 文档是”形式良好”的 XML 文档,这也符合文档类型定义(DTD)的规则:<pre><code class="lang-xml"><?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
</code></pre>
在上面的实例中,DOCTYPE 声明是对外部 DTD 文件的引用。下面的段落展示了这个文件的内容。
<a name="EXX9D"></a><h2 id="g168is"><a name="g168is" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML DTD</h2>DTD 的目的是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:<pre><code class="lang-xml"><!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
</code></pre>
<a name="iTdGM"></a><h2 id="cced4p"><a name="cced4p" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML Schema</h2>W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema:<pre><code class="lang-xml"><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>
</code></pre>
<a name="jCRsR"></a><h1 id="flqfsk"><a name="flqfsk" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 验证器</h1>使用我们的 XML 验证器来对您的 XML 文件进行语法检查。
<a name="LYkBx"></a><h2 id="b1hpyr"><a name="b1hpyr" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 错误会终止您的程序</h2>XML 文档中的错误会终止您的 XML 应用程序。<br />W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性。<br />如果使用 HTML,创建包含大量错误的文档是有可能的(比如您忘记了结束标签)。其中一个主要的原因是 HTML 浏览器相当臃肿,兼容性也很差,并且它们有自己的方式来确定当发现错误时文档应该显示为什么样子。<br /><strong>使用 XML 时,这种情况不应当存在。</strong>
<a name="HVpBM"></a><h1 id="a2e4kj"><a name="a2e4kj" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML 命名空间</h1>XML 命名空间提供避免元素命名冲突的方法。
<a name="JLYE9"></a><h2 id="8hd574"><a name="8hd574" class="reference-link"></a><span class="header-link octicon octicon-link"></span>命名冲突</h2>在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。<br />这个 XML 携带 HTML 表格的信息:<pre><code class="lang-xml"><table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
</code></pre>
这个 XML 文档携带有关桌子的信息(一件家具):<pre><code class="lang-xml"><table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
</code></pre>
假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table> 元素,就会发生命名冲突。<br />XML 解析器无法确定如何处理这类冲突。
<a name="7BaCO"></a><h2 id="4m6d5"><a name="4m6d5" class="reference-link"></a><span class="header-link octicon octicon-link"></span>使用前缀来避免命名冲突</h2>在 XML 中的命名冲突可以通过使用名称前缀从而容易地避免。<br />该 XML 携带某个 HTML 表格和某件家具的信息:
```xml
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table></li></ul>
<p><f:table></p>
<p><f:name>African Coffee Table</f:name></p>
<p><f:width>80</f:width></p>
<p><f:length>120</f:length>
</f:table></p>
<pre><code>在上面的实例中,不会有冲突,因为两个 <table> 元素有不同的名称。
<a name="hqtcz"></a>
## XML 命名空间 - xmlns 属性
当在 XML 中使用前缀时,一个所谓的用于前缀的**命名空间**必须被定义。<br />命名空间是在元素的开始标签的 **xmlns 属性**中定义的。<br />命名空间声明的语法如下。xmlns:_前缀_="_URI_"。
```xml
<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>
</code></pre><p>在上面的实例中,<table> 标签的 xmlns 属性定义了 h: 和 f: 前缀的合格命名空间。<br />当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。<br />命名空间,可以在他们被使用的元素中或者在 XML 根元素中声明:</p>
<pre><code class="lang-xml"><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>
</code></pre>
<p><strong>注释:</strong>命名空间 URI 不会被解析器用于查找信息。<br />其目的是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。<br />请访问 <a rel="nofollow" href="http://www.w3.org/TR/html4/">http://www.w3.org/TR/html4/</a>。
<a name="TQH1Q"></a></p>
<h2 id="rxef4"><a name="rxef4" class="reference-link"></a><span class="header-link octicon octicon-link"></span>统一资源标识符(URI,全称 Uniform Resource Identifier)</h2><p><strong>统一资源标识符</strong>(URI)是一串可以标识因特网资源的字符。<br />最常用的 URI 是用来标识因特网域名地址的<strong>统一资源定位器</strong>(URL)。另一个不那么常用的 URI 是<strong>统一资源命名</strong>(URN)。<br />在我们的实例中,我们仅使用 URL。
<a name="lBqWa"></a></p>
<h2 id="dw1d3f"><a name="dw1d3f" class="reference-link"></a><span class="header-link octicon octicon-link"></span>默认的命名空间</h2><p>为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。它的语法如下:<br />xmlns=”<em>namespaceURI</em>“<br />这个 XML 携带 HTML 表格的信息:</p>
<pre><code class="lang-xml"><table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
</code></pre>
<p>这个XML携带有关一件家具的信息:</p>
<pre><code class="lang-xml"><table xmlns="http://www.w3schools.com/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
</code></pre>
<p><a name="yzpFs"></a></p>
<h2 id="4k9k97"><a name="4k9k97" class="reference-link"></a><span class="header-link octicon octicon-link"></span>实际使用中的命名空间</h2><p>XSLT 是一种用于把 XML 文档转换为其他格式的 XML 语言,比如 HTML。<br />在下面的 XSLT 文档中,您可以看到,大多数的标签是 HTML 标签。<br />非 HTML 的标签都有前缀 xsl,并由此命名空间标识:</p>
<pre><code class="lang-xml">xmlns:xsl="http://www.w3.org/1999/XSL/Transform":
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr>
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
</code></pre>
<p><a name="vCrhL"></a></p>
<h1 id="idjz0"><a name="idjz0" class="reference-link"></a><span class="header-link octicon octicon-link"></span>XML CDATA</h1><p>XML 文档中的所有文本均会被解析器解析。<br />只有 CDATA 区段中的文本会被解析器忽略。
<a name="9NaDD"></a></p>
<h2 id="e4rqeu"><a name="e4rqeu" class="reference-link"></a><span class="header-link octicon octicon-link"></span>PCDATA - 被解析的字符数据</h2><p>XML 解析器通常会解析 XML 文档中所有的文本。<br />当某个 XML 元素被解析时,其标签之间的文本也会被解析:</p>
<pre><code class="lang-xml"><message>This text is also parsed</message>
</code></pre>
<p>解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个实例中,其中的 <name> 元素包含着另外的两个元素(first 和 last):</p>
<pre><code class="lang-xml"><name><first>Bill</first><last>Gates</last></name>
</code></pre>
<p>而解析器会把它分解为像这样的子元素:</p>
<pre><code class="lang-xml"><name>
<first>Bill</first>
<last>Gates</last>
</name>
</code></pre>
<p>解析字符数据(PCDATA)是 XML 解析器解析的文本数据使用的一个术语。
<a name="pG5UN"></a></p>
<h2 id="gd5ylk"><a name="gd5ylk" class="reference-link"></a><span class="header-link octicon octicon-link"></span>CDATA - (未解析)字符数据</h2><ul>
<li>术语 CDATA 是不应该由 XML 解析器解析的文本数据。</li><li>像 “<” 和 “&” 字符在 XML 元素中都是非法的。</li><li>“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。</li><li>“&” 会产生错误,因为解析器会把该字符解释为字符实体的开始。</li><li>某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。</li><li>CDATA 部分中的所有内容都会被解析器忽略。</li><li>CDATA 部分由 “<strong><![CDATA[</strong>“ 开始,由 “<strong>]]></strong>“ 结束:</li></ul>
<pre><code class="lang-xml"><script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>
</code></pre>
<p>在上面的实例中,解析器会忽略 CDATA 部分中的所有内容。<br /><strong>关于 CDATA 部分的注释:</strong></p>
<ul>
<li>CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。</li><li>标记 CDATA 部分结尾的 “]]>” 不能包含空格或换行。<blockquote>
<p>提示:由于Mybatis使用XML格式编写SQL,故写SQL时经常会用到<![CDATA[…]]></p>
</blockquote>
</li></ul>
<p>xml转json<br />转换工具:<a rel="nofollow" href="https://json.im/json2/json2xml.html">https://json.im/json2/json2xml.html</a></p>
<pre><code class="lang-json"># json
{
"user": {
"name": "name",
"num": [
101,102,103
],
"org": [
{
"id": 1,
"no": "1001",
"yes": true
}
]
}
}
# xml
<?xml version="1.0" encoding="UTF-8" ?>
<user>
<name>name</name>
<num>101</num>
<num>102</num>
<num>103</num>
<org>
<id>1</id>
<no>1001</no>
<yes>true</yes>
</org>
</user>
</code></pre>
<p><a name="eCBfO"></a></p>
<h1 id="doeluz"><a name="doeluz" class="reference-link"></a><span class="header-link octicon octicon-link"></span>优缺点</h1><ul>
<li>优点:功能强大</li><li>缺点:反人类,你不觉得xml很难阅读并且反人类么。。。。</li></ul>