XSL 2.0 避免了 xsl:result-document 的重复输出



我正在使用xsl:result-document将输入XML文件拆分为多个子文档。 当我的转换在输入文件上的大数组上运行时,几个输入"有数据",使得 xsl:result-document 尝试创建相同的输出文件两次,因此会遇到错误。

理想情况下,我想简单地创建第二个文档,并在文件扩展名之前附加"_2"。 我是 XSL 2.0 的新手,无法想象如何实现此目的。 拥有一个对文档全局的数组(更像是一个映射),我可以保留每个输出文件名(以及计数器)会很棒。 不过,在 XSL 中执行此操作似乎不是一件容易的事。 有人对如何做到这一点有任何想法吗?

XSL 变量的范围让我感到困惑,我想知道这是否可能。 例如,如果我在第一个模板中创建了一个匹配的变量,则该变量是否在模板中可见,这是由于从第一个模板"调用"以匹配的应用模板的结果?

另一个想法是,是否可以使用一些疯狂的"身份转换"来查找重复项并在进一步的模板匹配发生之前将"_2"附加到数据中?

谢谢你的时间。

使用

结果文档使用示例进行编辑:

 <xsl:result-document href="{$directory_name}{$misc_string}.xml" format="MainOutput" cdata-section-elements="SomeSection">

克里斯

你可以使用 generate-id()...

<xsl:result-document href="{$directory_name}{$misc_string}{generate-id()}.xml" 
 format="MainOutput" cdata-section-elements="SomeSection">

您也可以使用 xsl:number,但如果没有工作示例(XML 和 XSLT),很难提供示例。(上下文非常重要。这很可能是它的样子:

<xsl:variable name="nbr">
    <xsl:number level="any"/>
</xsl:variable>
<xsl:result-document href="{$directory_name}{$misc_string}_{$nbr}.xml" 
    format="MainOutput" cdata-section-elements="SomeSection">

看看xsl:number链接并尝试一些属性(如 @count ),这应该可以做到。

最新更新