ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
XML 被设计为传输和存储数据,其焦点是数据的内容。 HTML 被设计用来显示数据,其焦点是数据的外观。 HTML 旨在显示信息,而 XML 旨在传输信息。 XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML **XML 声明(可选)** 它定义 XML 的版本 和所使用的编码 ~~~ <!--XML 声明它放在第一行。如此例它定义 XML 的版本 (1.0) 和所使用的编码 (UTF-8)。--> <?xml version="1.0" encoding="UTF-8"?> ~~~ **XML 文档必须有根元素** XML 文档必须有一个元素是所有其他元素的*父元素*。该元素称为*根元素*。 在 XML 中,文档中的空格不会被删节。 ~~~ <root> <child> <subchild>... ..</subchild> </child> </root> ~~~ **XML 标签对大小写敏感** 在 XML 中,标签\<Letter>与标签\<letter>是不同的。 ~~~ <Message>这是错误的。</message> <message>这是正确的。</message> ~~~ **XML 的属性值须加引号** 与 HTML 类似,XML 也可拥有属性(名称/值的对)。 ~~~ <note date="08/08/2008"> <to>George</to> <from>John</from> </note> ~~~ **在 XML 中,所有元素都*必须*彼此正确地嵌套:** 在此例中,正确嵌套的意思是:由于 元素是在 元素内打开的,那么它必须在 元素内关闭。 ~~~ <b><i>This text is bold and italic</i></b> ~~~ **实体引用与CDATA** 在 XML 中,有 5 个预定义的实体引用:在为使用CDATA时会将<理解为标签开始标志从而导致xml的致命错误 | 正确引用写法 | 实体 | 描述 | | --- | --- | --- | | \&lt; | < | 小于 | | \&gt; | > | 大于 | | \&amp; | & | 和号 | | \&apos; | ' | 单引号 | | \&quot; | " | 引号 | 假如您在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。因此你不能这样写: ~~~ <message>if salary < 1000 then</message> ~~~ 为了避免此类错误,需要把字符 "<" 替换为实体引用,就像这样: ~~~ <message>if salary &lt; 1000 then</message> ~~~ 为了方便我们可以使用CDATA来原样输出<等字符 ``` <xml><ToUserName><![CDATA[gh_3bba3aa9e2cb]]></ToUserName> <FromUserName><![CDATA[oW4qXv4qQLI1v5pjbmDGuG-qrcTE]]></FromUserName> <CreateTime>15360&48244</CreateTime> <MsgType><![CDATA["text"]]></MsgType> <Content><![CDATA[呼<&>呼]]></Content> <MsgId>6597276973499284306</MsgId> </xml> 注意:在xml中"< "、">"、"/"、""等是不被允许的如果xml中有这这些数据 那么必须转成<这种实体 而 ![CDATA[[ ]] 就避免了转化实体在它里面我们可以原样输出<这些特殊字符而不会报错 ``` >[danger]CDATA 部分不能包含字符串 "\]\]>"。也不允许嵌套的 CDATA 部分。 标记 CDATA 部分结尾的 "\]\]>" 不能包含空格或折行。 **可选的命名空间** 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。 这个 XML 文档携带着某个表格中的信息: ~~~ <table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table> ~~~ 这个 XML 文档携带有关桌子的信息(一件家具): ~~~ <table> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table> ~~~ 假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 元素,就会发生命名冲突。ML 解析器无法确定如何处理这类冲突。 解决办法可以使用前缀或者命名空间 1、使用前缀来避免命名冲突 此文档带有某个表格中的信息: ``` <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> ``` 此 XML 文档携带着有关一件家具的信息: ``` <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> ``` 2、使用命名空间(xmlns) 与仅仅使用前缀不同,我们为 标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。 这个 XML 文档携带着某个表格中的信息: ``` <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> ``` 此 XML 文档携带着有关一件家具的信息: ``` <f:table xmlns:f="http://www.w3school.com.cn/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> ``` **命名空间的实际应用** 当开始使用 XSL 时,您不久就会看到实际使用中的命名空间。XSL 样式表用于将 XML 文档转换为其他格式,比如 HTML。 如果您仔细观察下面的这个 XSL 文档,就会看到大多数的标签是HTML标签。非 HTML 的标签都有前缀 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> ```