代码之家  ›  专栏  ›  技术社区  ›  Jon W

XSLT 2.0中使用结果文档进行内联输出文档选择

  •  3
  • Jon W  · 技术社区  · 17 年前

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

    <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中有没有办法做到这一点,还是说只有一次通过,一个文档?

    提前感谢。

    1 回复  |  直到 17 年前
        1
  •  1
  •   Dimitre Novatchev    17 年前

    :

    这种转变 :

    <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传递”,代码是“内联的”。