使用xml数据应用模板

时间:2015-03-13 12:38:04

标签: xml xslt xpath xslt-1.0

我们使用XSLT呈现我们的网页

我想要完成的是使用xml数据渲染模板:

<xsl:for-each select="$itemview/items/item">
        <xsl:variable name="productitem">
          <productpreview product="{self::node()}" />
        </xsl:variable>
        <xsl:apply-templates select="msxsl:node-set($productitem)" mode="shop"/>
        <!--/.item-->
      </xsl:for-each>

模板:

<xsl:template match="productpreview" mode="tshop">
  <div class="test">
    <xsl:value-of select="@product/itemcode" />
  </div>        
  </xsl:template>
</xsl:stylesheet>

结果模板被渲染但xml结构消失了,我只在<xsl:value-of select="@product" />时获取数据,而且这些数据看起来很平坦。

是否可以使用apply-template发送xml结构?我该怎么做?

1 个答案:

答案 0 :(得分:0)

您既没有显示您的XML输入也没有显示您想要的结果,但假设您只想存储和处理item元素,那么我会这样做

<xsl:apply-templates select="$itemview/items/item" mode="shop"/>

而不是

<xsl:for-each select="$itemview/items/item">
        <xsl:variable name="productitem">
          <productpreview product="{self::node()}" />
        </xsl:variable>
        <xsl:apply-templates select="msxsl:node-set($productitem)" mode="shop"/>
        <!--/.item-->
      </xsl:for-each>

然后简单地

<xsl:template match="item" mode="shop">
  <div class="test">
    <xsl:value-of select="itemcode" />
  </div>        
  </xsl:template>
</xsl:stylesheet>

而不是

<xsl:template match="productpreview" mode="tshop">
  <div class="test">
    <xsl:value-of select="@product/itemcode" />
  </div>        
  </xsl:template>
</xsl:stylesheet>

我认为不需要变量或至少不需要结果树片段,您似乎想要处理原始输入。