-2

我想知道可以在模板中传输变量并获取值。例如在模板 A 中设置变量并在模板 B 中获取值?我尝试使用调用模板,但我没有得到价值。

<xsl:template name="Transf">
  <xsl:param name="T1"/>
  <xsl:value-of select="$T1"/>
</xsl:template>

<xsl:template match='director/filmDirectors'>
   <xsl:if test="filmDirector='Allen Woody'">
      <xsl:call-template name="Transf">
       <xsl:value-of select="@id"/><xsl:with-param name="T1" select="@id"/>
      </xsl:call-template>
   </xsl:if>

</xsl:template>

<xsl:template match='movie/titles'>
 <xsl:call-template name="Transf">
  <xsl:with-param name="T1"><xsl:value-of select="tile[@id=$T1]"/></xsl:with-param>
 </xsl:call-template>
</xsl:template>

XML 文件

<list>
 <director>
   <filmDirectors>
    <filmDirector id="steve-s">
     <lname>Spielberg</lname>
     <lfirstname>Steven</lfirstname>
    </filmDirector>

   <filmDirector id="woody-a">
    <lname>Allen<lname>
    <lfirstname>Woody</lfirstname>
   </filmDirector>
 <filmDirectors>
</director>

<movie>
 <titles>
   <title id="steve-s">Jurassic Park</title>
 </titles>
 <titles>
   <title id="woody-a">Small Time Crooks</title>
 </titles>
</movie>

你能给我建议吗?

预先感谢您的回复。

4

2 回答 2

1

在不了解 XML 结构的情况下很难给出解决方案,但总体思路是使用 apply-templates 而不是 call-templates。解决方案可能如下所示。

<xsl:template match='director/filmDirectors'>
   <xsl:apply-templates>
      <xsl:with-param name="filmDirectors" select="." tunnel="yes" />
   </xsl:apply-templates>
</xsl:template>

<xsl:template match='movie/titles'>
  <xsl:param name="filmDirectors" tunnel="yes" />
  <xsl:value-of select="concat('title: ',.,' director: ',$filmDirectors)" />
</xsl:template>
于 2013-03-27T22:34:46.767 回答
0

我认为你的问题在这里

<xsl:template match='movie/titles'>
 <xsl:call-template name="Transf">
  <xsl:with-param name="T1"><xsl:value-of select="tile[@id=$T1]"/></xsl:with-param>
 </xsl:call-template>
</xsl:template>

您正在引用一个名为 的变量/参数$T1,但模板中没有定义这样的变量/参数。

除非有一个名为的全局变量/参数$T1,否则上面的代码会导致编译时错误

还有一个严重的错误:

<xsl:template match='director/filmDirectors'>
   <xsl:call-template name="Transf">
     <xsl:if test="filmDirector='Allen Woody'">
      <xsl:value-of select="@id"/><xsl:with-param name="T1" select="@id"/>
     </xsl:if>
  </xsl:call-template>
</xsl:template>

xsl:if不能是“xsl:call-template”的子级

我对您的建议是阅读一本关于 XSLT 的介绍性书籍,然后再提出充满错误的问题

于 2013-03-28T01:32:43.607 回答