0

次のような xml ファイルを fo ファイルに渡しています。

<?xml version="1.0"?>
    <activityExport>
    <resourceKey>
    <key>monthName</key>
    <value>January</value>
    </resourceKey>

したがって、直接使用する場合:

<xsl:value-of select="activityExport/resourceKey[key='monthName']/value"/>

PDF ファイルに「January」が表示されます。

ただし、テンプレートでこのように使用すると、次のようになります。

<xsl:template name="format-month">
    <xsl:param name="date"/>
    <xsl:param name="month" select="format-number(substring($date,6,2), '##')"/>
    <xsl:param name="format" select="'m'"/>
    <xsl:param name="month-word">
        <xsl:choose>
            <xsl:when test="$month = 1"><xsl:value-of select="activityExport/resourceKey[key='monthName']/value"/>
</xsl:when>

次に、電話しても「1月」が表示されません。

<xsl:variable name="monthName">
    <xsl:call-template name="format-month">
    <xsl:with-param name="format" select="'M'"/>
    <xsl:with-param name="month" select="@monthValue"/>
    </xsl:call-template>
    </xsl:variable>
    <xsl:value-of select="concat($monthName,' ',@yearValue)"/>

次の場所に静的文字列がある場合、テンプレートが機能することはわかっています。

        <xsl:choose>
            <xsl:when test="$month = 1">Januaryyy</xsl:when>

それから、Januaryyyy が元気に見えます。

したがって、テンプレートは機能し、リソースは存在しますが、value-of-select は call-template または xsl:choose または xsl:when test 内では機能しません

何か助けはありますか?よろしく!

4

1 に答える 1

2

テンプレートは、XML 内の不適切な位置から呼び出していることを除いて、おそらく問題ありません。したがって、設定に使用している XPath はmonth-word何も検出しません。これは、何もないパスです。

たとえば、次の XSLT スタイルシートは次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template name="format-month">
    <xsl:param name="date"/>
    <xsl:param name="month" select="format-number(substring($date,6,2), '##')"/>
    <xsl:param name="format" select="'m'"/>
    <xsl:param name="month-word">
      <xsl:choose>
        <xsl:when test="$month = 1">
          <xsl:value-of select="activityExport/resourceKey[key='monthName']/value"/>
        </xsl:when>
      </xsl:choose>
    </xsl:param>

    <xsl:value-of select="$month-word"/>
  </xsl:template>

  <xsl:template match="/">
    <xsl:variable name="monthName">
      <xsl:call-template name="format-month">
        <xsl:with-param name="month" select=" '1' "/>
        <xsl:with-param name="format" select="'M'"/>
      </xsl:call-template>
    </xsl:variable>

    <xsl:value-of select="concat($monthName,' ',@yearValue)"/>
  </xsl:template>

</xsl:stylesheet>

この XML に適用されます:

<activityExport>
  <resourceKey>
    <key>monthName</key>
    <value>January</value>
  </resourceKey>
</activityExport>

次の出力が生成されます。

January 

monthテンプレートのパラメータを value に置き換えたことに注意してください1。この入力 XML の要素には@monthValue属性がなく (これが、不適切な場所からテンプレートを呼び出していると思われる理由ですmonth-word) xsl:choose、.

実際の入力 XML で機能させるには、XPath を、XML ドキュメント内の任意の場所"//activityExport/resourceKey[key='monthName']/value"へのパスを二重スラッシュで定義する場所に置き換えてみてください。ノードが 1 つしかない場合は、これで問題ありません。それ以外の場合は、適切な XPath を作成する必要があります。activityExport

于 2013-09-09T12:47:24.727 に答える