在一次转换中构建和使用文件

时间:2014-06-15 19:24:48

标签: xslt-2.0

我可以在一个转换/样式表中构建文件并引用它吗? 像这样:

<xsl:template match="...." >
    <xsl:result-document href="file-A.xml">
       <h2 id="a1">.....</h2>
       .....
    </xsl:result-document>

    <xsl:result-document href="file-B.xml">
          <xsl:for-each select="document( 'file-A.xml')/h2">
           ...
          <xsl:for-each>
    </xsl:result-document>
</xsl:template>

1 个答案:

答案 0 :(得分:2)

据我所知,您不能在一次转换中使用相同的URL进行读写。但是,您可以在内存中构建临时树,例如<xsl:variable name="a"><h2>...</h2></xsl:variable>然后使用apply-templates或for-each处理它们。 <xsl:for-each select="$a/h2"></xsl:for-each>

规范说:“[ERR XTRE1500]样式表在单次转换期间写入外部资源并从同一资源读取是一个可恢复的动态错误,无论是否使用相同的URI来访问资源在两种情况下。可选的恢复操作都依赖于实现:不需要实现来检测错误条件。请注意,如果未检测到错误,则从资源读取的文档是否反映其状态之前或之后是未定义的。结果树写成“。

所以基于它可能适用于某些XSLT 2.0处理器。我知道它不适用于Saxon 9。