web-dev-qa-db-ja.com

パラメータでxsltテンプレートを呼び出す

私はこのxsltを持っています:

  <xsl:template name="dumpDebugData">
    <xsl:param name="elementToDump" />
    <xsl:for-each select="$elementToDump/@*">
      <xsl:text>&#10;</xsl:text>    <!-- newline char -->
      <xsl:value-of select="name()" /> : <xsl:value-of select="." />
    </xsl:for-each>
  </xsl:template>

(名前/値のように)すべての要素を表示したいのですが、このテンプレートをどのように呼び出しますか?

16
raklos

テンプレートはノードセットを想定しているため、次のことを行う必要があります。

<xsl:call-template name="dumpDebugData">
  <xsl:with-param name="elementToDump" select="some/xpath" />
</xsl:call-template>
30
Tomalak

このようなものを試してください:

<xsl:call-template name="dumpDebugData">
    <xsl:with-param name="elementToDump">foo</xsl:with-param>
</xsl:call-template>
13
Andrew Hare

元の答えはパラメーターを使用しません。パラメータ=現在の要素の場合にのみ機能します。これはパラメータを考慮に入れます。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output indent="yes" />
   <xsl:strip-space elements="*" />
   <xsl:template match="element()">
      <xsl:call-template name="dumpDebugData">
         <xsl:with-param name="elementToDump" select="." />
      </xsl:call-template>
      <xsl:apply-templates />
   </xsl:template>
   <xsl:template name="dumpDebugData">
      <xsl:param name="elementToDump" />
      Node:
      <xsl:value-of select="name($elementToDump)" />
      :
      <xsl:value-of select="text($elementToDump)" />
      <xsl:for-each select="$elementToDump/@*">
         Attribute:
         <xsl:value-of select="name()" />
         :
         <xsl:value-of select="." />
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>
6
user2587355

元のXSLTにはいくつかの問題があるため、私はそれを調べて、信じていることを実行する次のコードを入手しました。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output indent="yes" />
   <xsl:strip-space elements="*" />
   <xsl:template match="element()">
      <xsl:call-template name="dumpDebugData">
         <xsl:with-param name="elementToDump" select="." />
      </xsl:call-template>
      <xsl:apply-templates />
   </xsl:template>
   <xsl:template name="dumpDebugData">
      <xsl:param name="elementToDump" />
      Node:
      <xsl:value-of select="name()" />
      :
      <xsl:value-of select="text()" />
      <xsl:for-each select="attribute::*">
         Attribute:
         <xsl:value-of select="name()" />
         :
         <xsl:value-of select="." />
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>
2
samjudson