首页 > 代码库 > 如何控制XML文档的样式

如何控制XML文档的样式

xml文档是纯文本文件,虽然内容是完全自定义的,但显示的效果就差强人意了,那么是否可以让xml文档也像html文档那样可以有丰富多彩的显示效果呢?当然可以,html文档是通过css文档来控制显示样式的,xml文档可以通过xsl文档来控制,其实质就是把xml文档通过xslt(xsl transformations)转换成html文档,或者比html更严谨的xhtml文档。

那么如何读取xml文档中的数据呢?下面通过一个例子来实验一下:

首先看一下最原始的xml文档:

 1 <?xml version="1.0"?> 2 <team> 3     <people type="teacher" id="2"> 4         <name>zhangsan</name> 5         <gender>f</gender> 6     </people> 7     <people type="teacher" id="5"> 8         <name>lisi</name> 9         <gender>m</gender>10     </people>11     <people type="student" id="1">12         <name>wangwu</name>13         <gender>f</gender>14     </people>15     <people type="teacher" id="3">16         <name>zhaoliu</name>17         <gender>f</gender>18     </people>19     <people type="teacher" id="1">20         <name>maqi</name>21         <gender>m</gender>22     </people>23 </team>

接下来,先搭一个xsl文档的基本框架:

 1 <?xml version="1.0"?> 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:template match="/"> 4     <html> 5         <body> 6             <h2>Team People Collection</h2> 7             <table border="1"> 8                 <tr bgcolor="#9acd32"> 9                     <th align="left">Name</th>10                     <th align="left">Gender</th>11                 </tr>12             </table>13         </body>14     </html>15 </xsl:template>

xsl文档本身其实也是个xml文档,所以最开始也需要xml声明。

现在的xsl文档只是个空架子,因为里面并没有获取xml文档的数据,接下来看如何填充数据。

通过<xsl:value-of select="team/people/name" /> 可提取select选定节点的值,并添加到转换的html文档中。

但这样只能获取一行的数据,如果有很多people节点,如何全都获取呢?

再来看<xsl:for-each select="team/people"></xsl:for-each>可遍历select选定节点的值。

数据都取出来了,我们还想再排下序,没问题,在<xsl:for-each>下添加子节点<xsl:sort select="name">。

但可能有些并不是我们想要的,可以通过<xsl:for-each select="team/people[name=‘zhangsan‘]">过滤xml中的元素。

注意过滤运算符有:

= 等于

!= 不等于

&lt; 小于

&gt; 大于

现在的xsl文档变成了下面的样子:

 1 <?xml version="1.0"?> 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:template match="/"> 4     <html> 5         <body> 6             <h2>Team People Collection</h2> 7             <table border="1"> 8                 <tr bgcolor="#9acd32"> 9                     <th align="left">Name</th>10                     <th align="left">Gender</th>11                 </tr>12                 <xsl:for-each select="team/people[name=‘zhangsan‘]">13                 <xsl:sort select="name"/>14                     <tr>15                         <td><xsl:value-of select="name"/></td>16                         <td><xsl:value-of select="gender"/></td>17                     </tr>18                 </xsl:for-each>19             </table>20         </body>21     </html>22 </xsl:template>23 </xsl:stylesheet>

xsl文档完成了,最后在xml文档中引入此xsl文档即可,最后的xml文档如下:

 1 <?xml version="1.0"?> 2 <?xml-stylesheet type="text/xsl" href="http://www.mamicode.com/XSLTDemo.xsl"?> 3 <team> 4     <people type="teacher" id="2"> 5         <name>zhangsan</name> 6         <gender>f</gender> 7     </people> 8     <people type="teacher" id="5"> 9         <name>lisi</name>10         <gender>m</gender>11     </people>12     <people type="student" id="1">13         <name>wangwu</name>14         <gender>f</gender>15     </people>16     <people type="teacher" id="3">17         <name>zhaoliu</name>18         <gender>f</gender>19     </people>20     <people type="teacher" id="1">21         <name>maqi</name>22         <gender>m</gender>23     </people>24 </team>

注:此处xml文档和xsl文档放在了同一个文件夹下。

现在,在浏览器中打开xml文档就可以看到不一样的效果了,快来试试吧!

如何控制XML文档的样式