0

以前のテンプレートから現在のテンプレートに変数を継承しようとしています。

これが私のxslで、何か問題があるのではないかと思っています:

<xsl:template match="child1">
    <xsl:variable name="props-value">
        <xsl:value-of select="VALUE1"/>
    </xsl:variable>  
    <xsl:apply-templates select="attribute[matches(.,'=@')]">
        <xsl:with-param name="props-value" select="$props-value" /> 
    </xsl:apply-templates>
</xsl:template>  
<xsl:template match="attribute[matches(.,'=@')]">
<xsl:param name="props-value"/>
<xsl:copy>  
<xsl:apply-templates select="@*"/>
    <xsl:if test="$props_value = 'VALUE1'">
        Value is true
    </xsl:if>
</xsl:copy>
</xsl:template>

期待される出力: 値は true です。

4

1 に答える 1

0

XSLT に関する 2 つの問題:

  1. 最初のテンプレートの変数では、値として選択"VALUE1"しました。<VALUE1> これはelementsに一致します。選択したいと思います" 'VALUE1' "(値が「VALUE1」の文字列)
  2. 2 番目のテンプレートのテストでは$props_value、アンダースコアを使用して記述しましたが、パラメーターはprops-valueハイフンで呼び出されます。

XSLT の修正版は次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="child1">
    <xsl:variable name="props-value">
      <xsl:value-of select=" 'VALUE1' "/>
    </xsl:variable>
    <xsl:apply-templates select="attribute">
      <xsl:with-param name="props-value" select="$props-value" />
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="attribute">
    <xsl:param name="props-value"/>
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:if test="$props-value = 'VALUE1'">
        Value is true
      </xsl:if>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

次の入力 XML に適用した場合:

<child1>
  <attribute/>
</child1>

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

<attribute>
            Value is true
          </attribute>
于 2013-10-01T16:40:05.953 に答える