0

データベースでは、ユーザーは必要に応じて多数のプロパティを作成しています。サーバー側で生成された 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設定されます。現在、ユーザーが作成したプロパティの数/名前はわかりません。したがって、私の問題です。truefalse

編集 -- 要求に応じて 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>
4

2 に答える 2

0

次のように、for-each ループを使用するように XSLT をリファクタリングすることをお勧めします。

<xsl:for-each select="/xml/property">
  ... process the property ...
</xsl:for-each>
于 2015-03-03T21:44:53.637 に答える