多个输出文档:我可以从结果文档引用到我的原始文档吗?



我有一个XSLT,用于基于输入文档生成一系列输出文档。 基本上,我有 2 个目录,inout,我使用 XSLT 根据目录in中同名的文件在目录out中创建文件。

我的基本XML(文件列表.xml(包含文档列表:

<file name="1 old.xml"><...></file>
<file name="2 new.xml"><...></file>

目录in中的文件包含<source><target>节点。

和我的 XSLT:

<xsl:template match="file">
<xsl:result-document method="xml" href="{outputfolder@name}">
<xsl:when test="unparsed-text-available(inputfolder@name)">
<xsl:apply-templates select="document(inputfolder@name)"/>
</xsl:when>
</xsl:template>

现在我想根据文件名处理in中的文件:

  • 如果文件名包含"new",我只想复制"2 new.xml"中的所有节点,
  • 如果文件名包含"旧",我想修改"1 旧.xml"中的一个节点。

这是我修改节点的方式:

<xsl:template match="target">
<xsl:choose>
<xsl:when test="...">
<xsl:copy>
<xsl:copy-of select="ancestor::*/source"/>
</xsl:copy>    
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:template>

在此模板中,当前节点是1 old.xml中的<target>。在此位置,如何运行节点测试来查看创建输出文档的节点filelist.xml

最简单的方法是将全局变量绑定到主体输入文档:

<xsl:variable name="filelist" select="/" as="document-node(element(file))"/>

然后,您可以从样式表中的任何位置将其引用为$filelist.

as属性有助于使人类读者清楚,并为您提供自动检查样式表是否应用于正确类型的源文档。

顺便说一下,您通过使用包含空格的字符串作为 URI 来玩火(并且您似乎也在需要正斜杠的地方键入反斜杠(。

最新更新