我有一个要从中创建报告的事务的 xml 转储。(简化的)xml 结构如下所示:
Subject
id
name
license
event id=key
result
eventtype
date
action
charge id=key
result
code
date
...etc
每个主题只有一个 ID、名称和许可证;但是可能会有很多事件,并且每个主题都有很多费用——每一个都有不同的结果。
报告输出是一个表格类型,每个主题都有一个名称、ID、许可证的标题,以及标题下方列出的多个数据事务块。每个数据块根据事务类型具有不同的值和结构。
它适用于标头和每种数据交易类型,但只有第一个事件交易和第一个收费交易会打印出来。
(简化的)xsl 看起来像:
<xsl:for-each select="file/subject">
<xsl:if test="not (@subject = preceding-sibling::subject[1])">
<table width="754" border="2" cellpadding="0">
<tr>
<td width="172">ctn: <strong><xsl:value-of select="id"/></strong></td>
<td width="364">defendant: <strong><xsl:value-of select="name"/></strong></td>
<td width="200">sid: <strong><xsl:value-of select="license"/></strong></td>
</tr>
</table>
</xsl:if>
<blockquote>
<xsl:if test="event/eventType != ' '">
<table width="695" border="1">
<tr>
<td>Event<xsl:value-of select="event/result"/></td>
<td>Eventtype<xsl:value-of select="event/eventtype"/></td>
<td>Date<xsl:value-of select="event/date"/></td>
</tr>
</table>
</xsl:if>
<xsl:if test="charge/code != ' '">
<table width="695" border="1">
<tr>
<td>Charge<xsl:value-of select="charge/result"/></td>
<td>Code<xsl:value-of select="charge/code"/></td>
<td>Date<xsl:value-of select="charge/date"/></td>
</tr>
</table>
</xsl:if>
</blockquote>
</xsl:for-each>
我假设我需要一个额外的 for-each 来扫描子节点,但添加额外的循环只会给我标题。
有什么想法吗?
(感谢您花时间阅读本文。:o)