2

パラメータを渡さない xslt ファイルがあり、その理由がわかりません。

以前にこれを行ったことがありますが、何が欠けているのかわかりません。

グローバル変数を設定しようとしましたが、設定されていないようです。

設定されているローカル変数を渡そうとしましたが、渡されません。" " 要素に直接移動したかったSALES/SUBJECTのですが、変数が失われ、ビルトイン Rules.xsl ファイルを処理する前にこの問題を覚えていたので、SALES最初に ELEMENT " " に移動して回避しようとしました。しかし、それはまだそこに行くようでした。しかし、とにかくそれ以前にパラメーターが空白であることがわかりました。

XML ファイルは次のとおりです。

<?xml version="1.0"?>
<REPORT VERSION="1.30" MAJORFORM="TomsForm">
  <SALES>
    <SUBJECT LATITUDE="32.2222" LONGITUDE="-118.222222">
      <BUSINESS>Joes Bar and Grill</BUSINESS>
    </SUBJECT>
  </SALES>
</REPORT>

グローバル変数をセットアップしようとする最初の XSLT ファイルは機能しません。「majorForm」が設定されている行で停止してウォッチ ウィンドウを見ると、「TomsForm」と表示されます@MAJORFORM。しかし、次の行に進むと空白です。そのため、私が使用するさらに下の場所も空白です。

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

  <xsl:output method="xml" indent="yes"/>
  <xsl:variable name="majorForm" select="@MAJORFORM"/>

  <xsl:template match="/*">
    <xsl:copy>

      <xsl:apply-templates select="SALES/SUBJECT"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="SALES/SUBJECT">
    <xsl:for-each select ="@*">
      <xsl:if test="name() = 'LATITUDE'">
        <form>
          <formName>
            <xsl:value-of select="$majorForm"/>
          </formName>
        </form>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

他のファイルでは、ローカル ファイルとして設定し、$majorForm を "TomsForm" に設定しますが、適用テンプレートで渡すと、何も渡されません。しかし、コードはそれを有効なパラメーターと見なしますが、そこには何もありません。

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

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/*">
    <xsl:copy>

      <xsl:variable name="majorForm" select="@MAJORFORM"/>

      <xsl:apply-templates select="SALES">
        <xsl:with-param name="mainform" select="$majorForm"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>


  <xsl:template match="SALES">
    <xsl:param name="mainForm"/>
    <xsl:for-each select ="@*">
    </xsl:for-each>
    <xsl:apply-templates>
      <xsl:with-param name="mainForm" select="$mainForm"/>
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="SALES/SUBJECT">
    <xsl:param name="mainForm"/>
    <xsl:for-each select ="@*">
      <xsl:if test="name() = 'LATITUDE'">
        <form>
          <formName>
            <xsl:value-of select="$mainForm"/>
          </formName>
        </form>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

私はこれを以前に行ったことがありますが、うまくいくでしょう。

これらの方法のどちらも機能しない理由を知りたいです。

4

1 に答える 1