3

问候,

我正在寻找一种在 XSLT 中进行内联结果(输出)文档选择的方法。我知道创建一个xsl:result-document节点以将一个转换应用于多个文档的方法。通常这种方法使用几个pass,例如:

<xsl:template match="/">
    <xsl:apply-templates select="*"/>
    <xsl:result-document href="test.xml">
        <xsl:apply-templates select="*"/>
    </xsl:result-document>
</xsl:template>

我正在寻找一种内联方法,这样我就可以一次构建两个输出文档。原因是我有一个临时树,它是在运行转换时构建的,我想输出到文件中。

<xsl:variable name="treeBase">
    <Base/>
</xsl:variable>

<xsl:template match="/">
    <xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="these_elements">
    <xsl:param name="temp" select="$treeBase"/>


</xsl:template>

<xsl:template match="not_these_elements">
    <xsl:param name="temp" select="$treeBase"/>

    <xsl:apply-templates select="@*|node()">
       <xsl:with-param name="temp">
           <Base>
              <xsl:copy-of select="$temp/Base/*"/>
              <Item>
                  <xsl:value-of select="ThisItem"/>
              </Item>
           </Base>
        </xsl:with-param>
</xsl:template>

你为什么想做这个? 在我的 XSLT 中,我通过递归参数调用构建了一个临时树。我想输出临时树,因为它正在构建到单独的文档中,但仍然使用为控制流而构建的临时树。使用当前方法,我必须进行两次复杂的转换。

有没有办法在 XSLT 中做到这一点,还是单程单文档?

提前致谢。

4

1 回答 1

1

这是一个如何执行此操作的工作示例

这种转变

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <!--                                               -->    
    <xsl:template match="/*">
      <xsl:variable name="vTop" select="."/>
  <!--                                               -->    
        <xsl:for-each-group select="num" group-by="xs:integer(.) mod 2">
          <xsl:result-document href="file:///C:/Temp/file{position()}.xml">
            <xsl:element name="{name($vTop)}">
              <xsl:copy-of select="current-group()"/>
            </xsl:element>
          </xsl:result-document>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

应用于此 XML 文档时

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>010</num>
</nums>

生成所需的两个文件file1.xml 和 file2.xml,它们相应地包含具有奇数和偶数值的“num”元素。

请注意,根据需要,没有“multiplr pass”并且代码是“inline”。

于 2009-03-12T19:19:26.830 回答