在数据库中,用户根据自己的需要创建了许多属性。在服务器端生成的 XML 包括数据库中的所有属性以及它们保存的数据。由 Microsoft 的 XSLT 处理器生成的报告包括这些属性的子集,这些属性基于用户的选择(通过 UI 中的复选框列表)。
<xml ...>
<property id="01" title="First Property" value="Beauty of XSLT"/>
<property id="02" title="Second Property" value="Please Help"/>
<property id="XX" title="Variable Number" value="Use Global Variables"/>
</xml>
以前,我有固定数量的具有预定义名称的属性。我在 XSL 文件中使用了全局变量并将它们的值(打开或关闭)传递给 XSLT 处理器。现在,这两个属性的名称及其编号都是用户定义的。
不知何故,我需要将要显示的属性列表传递给 XSLT 处理器。我不确定如何。任何建议或指导表示赞赏。
编辑——添加说明:
无论用户选择如何,在服务器端生成的 XML 都包括所有属性。转换是在客户端根据用户选择要显示的属性来完成的。用户可以更改此选择,但我们不会重新生成 XML。我们只是将不同的值作为全局变量传递给 XSLT 处理器。固定这些属性后,全局变量如下所示:g_property_id-01
设置为true
, 显示或false
, 不显示。现在,我不知道用户创建的属性的数量/名称;因此我的问题。
编辑——按要求添加 XSLT:
<?xml version="1.0"?>
<xsl:stylesheet ...>
...
<!-- This XSL Template is used to transform report results into HTML. -->
<xsl:param name="g_bShow_Property01" select="1"/>
<xsl:param name="g_bShowUser" select="1"/>
...
<xsl:template match="Result">
<xsl:variable name="g_bShowHeader" select="$g_bShowUser=1 or $g_bShow_Property01=1"/>
...
<!-- Should we show the Property with 01 id? -->
<xsl:if test="$g_bShow_Property01 = 1 and ./Document/Property02Value">
<xsl:variable name="FixedUpProperty">
<xsl:call-template name="fixup-text">
<xsl:with-param name="fixup-string" select="./Document/Property02Value"/>
</xsl:call-template>
</xsl:variable>
</xsl:if>
</xsl:stylesheet>