将XML文档通过XLS转化为浏览器便于表现的HTML,包含一些有趣的技巧。
如将未知数量的每两个<img>标签转换为<table>中的一个<tr>等。
摘选自所最近进行的项目。每组XML文档是对象型数据库中的一个实例,每个实例均不相同。通过XLS转换为HTML作为表现输出。美术效果已去除,通过更换XLS变更不同表现形式。
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="模板.xsl" ?>
<报表 标题="航天科工集团706">
<基础信息>
<病案编码>10</病案编码>
<姓名>x</姓名>
<性别>男</性别>
<年龄>12</年龄>
<自定义基础 内容="出生日期" 值="2001-1-1" />
<自定义基础 内容="父母" 值=":)" />
<镜检编码>10</镜检编码>
<日期>2004-6-20 13:50:49</日期>
<医师>
</医师>
<自定义镜检 内容="常规改" 值="xv" />
</基础信息>
<镜检所见>
<部位 名称="部位1">
<子部位 名称="子部位1" 所见="术语" 建议="ufhdfh" />
<子部位 名称="子部位2" 所见="部位1术语3
部位1术语1" 建议="" />
<子部位 名称="子部位3" 所见="" 建议="dhdf" />
</部位>
<部位 名称="部位2">
<子部位 名称="子部位21" 所见="部位2术语2术语" 建议="" />
</部位>
<图片 路径="图象1.bmp" />
<图片 路径="图象2.bmp" />
<图片 路径="图象1.bmp" />
<图片 路径="图象2.bmp" />
<插入图 路径="I:\MY\My Program\c#\706\bin\Debug\temp\插入图.BMP" />
</镜检所见>
</报表>
------------------------------------XSL----------------------------------
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<!--文字部分-->
<xsl:template match="/">
<table border="1" width="71%" bordercolorlight="#000000" bordercolordark="#000000" style="border-collapse: collapse" bgcolor="#FFFFCC" height="299">
<tr>
<td height="23" colspan="4" valign="top" bgcolor="#FFCC00">
<p align="center"/>
<xsl:value-of select="/报表/@标题"/>
</td>
</tr>
<xsl:apply-templates select="/报表/镜检所见/图片"/>
<tr>
<td width="84" height="23" valign="top">姓名</td>
<td colspan="3" valign="top"><xsl:value-of select="/报表/基础信息/姓名"/></td>
</tr>
<tr>
<td height="23" valign="top">性别</td>
<td colspan="3" valign="top"><xsl:value-of select="/报表/基础信息/性别"/></td>
</tr>
<tr>
<td height="23" valign="top">年龄</td>
<td colspan="3" valign="top"><xsl:value-of select="/报表/基础信息/年龄"/></td>
</tr>
<xsl:for-each select="/报表/基础信息/自定义基础">
<tr>
<td height="23" valign="top" bgcolor="#FFFF66"><xsl:value-of select="@内容"/></td>
<td colspan="3" valign="top" bgcolor="#FFFF66"><xsl:value-of select="@值"/></td>
</tr>
</xsl:for-each>
<tr>
<td height="23" valign="top" bgcolor="#FFFF99">日期</td>
<td colspan="3" valign="top" bgcolor="#FFFF99"><xsl:value-of select="/报表/基础信息/日期"/></td>
</tr>
<tr>
<td height="23" valign="top" bgcolor="#FFFF99">医师</td>
<td colspan="3" valign="top" bgcolor="#FFFF99"><xsl:value-of select="/报表/基础信息/医师"/></td>
</tr>
<xsl:for-each select="/报表/基础信息/自定义镜检">
<tr>
<td height="23" valign="top" bgcolor="#FFFF99"><xsl:value-of select="@内容"/></td>
<td colspan="3" valign="top" bgcolor="#FFFF99"><xsl:value-of select="@值"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select="/报表/镜检所见/部位">
<tr>
<td height="23" colspan="4"><xsl:value-of select="@名称"/></td>
</tr>
<xsl:for-each select="子部位">
<tr>
<td valign="top" bgcolor="#CCFF99"><xsl:value-of select="@名称"/></td>
<td colspan="3" valign="top" bgcolor="#CCFF99"><xsl:value-of select="@所见"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
<tr>
<td colspan="4" height="25">
<p align="left"/>建议</td>
</tr>
<tr>
<td height="23" colspan="4" bgcolor="#FFFFFF">
<xsl:for-each select="/报表/镜检所见/部位/子部位">
<xsl:value-of select="@建议"/><br/>
</xsl:for-each>
</td>
</tr>
<tr height="0">
<td ></td>
<td></td>
<td width="146"></td>
<td></td>
</tr>
</table>
</xsl:template>
<!--图片部分-->
<xsl:template match="/报表/镜检所见/图片">
<xsl:if test="position() mod 2!= 0">
<td height="23" colspan="3" valign="top">
<img border="0" width="352" height="288">
<xsl:attribute name="src">
<xsl:value-of select="@路径"/>
</xsl:attribute>
</img>
</td>
</xsl:if>
<xsl:if test="position() mod 2= 0">
<td width="352">
<img border="0" width="352" height="288">
<xsl:attribute name="src">
<xsl:value-of select="@路径"/>
</xsl:attribute>
</img>
</td>
</xsl:if>
<xsl:if test="position() mod 2= 0">
<tr/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>