首先,xml文件
< 锅炉 >
< 生产制造 >
< 层次1 >
< 产品编号 > P0807-XC </ 产品编号 >
< 产品名称 > 燃油气锅炉 </ 产品名称 >
< 产品型号 > Model1-XC </ 产品型号 >
< 发卡日期 > 2008-2-26 15:12:47 </ 发卡日期 >
< 监检报告编号 > Report-XC-004 </ 监检报告编号 >
< 监检单位 > 山东省特检院-XC </ 监检单位 >
< 卡号 > 30d345e6c005978c </ 卡号 >
< 企业id > 1 </ 企业id >
< 设计图号 > D1 </ 设计图号 >
< 设计许可号 > J1 </ 设计许可号 >
< 是否发卡 > 1 </ 是否发卡 >
< 完成日期 > 2008-2-21 0:00:00 </ 完成日期 >
< 制造厂家 ></ 制造厂家 >
< 制造许可证编号 > M1 </ 制造许可证编号 >
< 质保书编号 > XC-007 </ 质保书编号 >
</ 层次1 >
</ 生产制造 >
</ 锅炉 >
上述为获得的xml的简单示例,其中各个节点名称都是动态的,所以在xsl中不能写死。
下面贴出还算过得去的xslt文件
< xsl:stylesheet xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" version ="1.0" >
< xsl:template match ="//*" >
< HTML >
< head >
</ head >
< BODY >
< FONT face ="Verdana" size ="2" >
< TABLE cellspacing ="0" cellpadding ="0" >
< tr >
< td >
< xsl:variable name ="product" select ="name()" />
< xsl:for-each select ="./*" >
< xsl:variable name ="process" select ="name()" />
< xsl:for-each select ="././*" >
< xsl:variable name ="record" select ="name()" />
< table cellspacing ="0" cellpadding ="0" width ="600px" bordercolorlight ="#6699FF" bordercolordark ="#FFFFFF" >
< TR bgcolor ="#99ccff" >
< td class ="info" Width ="200px" >
设备名称: < B >
< xsl:value-of select ="$product" />
</ B >
</ td >
< td Width ="200px" >
环节名称: < B >
< xsl:value-of select ="$process" />
</ B >
</ td >
< td Width ="200px" >
记录号: < B >
< xsl:value-of select ="$record" />
</ B >
</ td >
</ TR >
</ table >
< table bgcolor ="#ccffcc" cellspacing ="0" cellpadding ="0" width ="600px" border ="1" bordercolorlight ="#6699FF" bordercolordark ="#FFFFFF" >
< xsl:for-each select ="./././*" >
< xsl:variable name ="nname" select ="name()" />
< TR >
< TD class ="info" Width ="200px" >
< xsl:value-of select ="name()" /> :
</ TD >
< td class ="info" width ="400px" >
< B >
< xsl:value-of select ="." />
< xsl:text disable-output-escaping ="yes" > & nbsp; </ xsl:text >
</ B >
</ td >
</ TR >
</ xsl:for-each >
</ table >
</ xsl:for-each >
</ xsl:for-each >
</ td >
</ tr >
</ TABLE >
</ FONT >
</ BODY >
</ HTML >
</ xsl:template >
</ xsl:stylesheet >
<xsl:template match="//*">中的"//*"表示匹配xml文档的根节点下的所有节点,这里因为要获取根节点的名称,所以不能直接匹配"/"(全文档)
<xsl:variable name="product" select="name()"/>
定义了变量product 用于存放根节点名称。select="name()"只能用于取得当前匹配层的节点名称,这点需要注意。再者,variable变量只能定义一次值,不能改变其值,且作用域限于当前template。
<xsl:for-each select ="./*"> 循环操作 select指定循环的节点匹配。
select="./*" 表示循环下一层节点。./表示在template指定的层数下移一层,*表示所有节点。
其中指定select=value 时 value可有多种表达方式。可以指定为具体的节点名称,如 select = "生产制造“ 如果能够确定节点名称的话。
也可以加入判定条件,如 select = "./*[name()=生产制造" 或者 select="./*[name()=$product]" 这里$product是前面定义的变量。$变量名是使用变量的方法。
<xsl:value-of select="$record"/> 这里是输出该节点的内容,或者变量的值。 当你一层层扒开xml的外衣的时候,最终取得果实的就是他了。
<xsl:value-of select="nodeName"/> 表示输出接点名为nodeName的节点的ContentValue。当然也可以输出属性,属性用select="@属性名"来指定,但是这里的属性为当前层的节点的属性,如果在循环内部,即为循环的节点的属性。输出属性的时候也可以指定属性的层,如select = "*/@name"表示输出循环下每一层的name属性的值。
基本上现在掌握的也就这样吧,xslt还是很强大的,以后有机会慢慢学习吧。