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

时间:2018-06-19 12:59:18

标签: xslt

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

我的基本XML(filelist.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 old.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>

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

1 个答案:

答案 0 :(得分:1)

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

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

,然后您可以在样式表中的任何位置将其称为$filelist

as属性有助于使读者理解清楚,并自动检查样式表是否已应用于正确的源文档。

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