双通不工作

时间:2015-10-26 19:32:08

标签: xml xslt

尝试使用两遍传递这个简单的xml:

<root>
  <a>Init</a>
</root>

2011年的答案(针对同一问题)似乎不起作用。 请参阅:Doing a double-pass in XSL?)。模板(与原始帖子相同)是:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:variable name="firstPassResult">
    <xsl:apply-templates select="/" mode="firstPass"/>
  </xsl:variable>

  <xsl:template match="/" mode="firstPass">
      <test>
        <firstPass>
          <xsl:value-of select="root/a"/>
        </firstPass>
      </test>
  </xsl:template>

  <xsl:template match="/">
    <xsl:apply-templates select="$firstPassResult" mode="secondPass"/>
  </xsl:template>

  <xsl:template match="/" mode="secondPass">
    <xsl:message terminate="no">
      <xsl:copy-of select="."/>
    </xsl:message>
  </xsl:template>

</xsl:stylesheet>

我正在使用XSLT 2.0。欢迎任何想法/反馈......请。

1 个答案:

答案 0 :(得分:0)

您的上一个模板:

<xsl:template match="/" mode="secondPass">
  <xsl:message terminate="no">
    <xsl:copy-of select="."/>
  </xsl:message>
</xsl:template>

将整个输出定向到message - 您的实现可能会或可能不会显示。如果要在输出树中查看结果,请将其更改为:

<xsl:template match="/" mode="secondPass">
    <xsl:copy-of select="."/>
</xsl:template>

P.S。我不确定这是两遍处理的最佳例子。你为什么不问自己的问题,描述你自己的情况。