使用文档函数(XSLT)时,避免重命名要打开的文件的方法?

使用文档函数(XSLT)时,避免重命名要打开的文件的方法?,xslt,document,filenames,concat,Xslt,Document,Filenames,Concat,我制作了一个xslt文件,用另一个文件(File1CORR.xml)来更正一个xml文件(File1.xml)。 问题是我有50个xml文件要更正,并且我必须重命名文档以在XSLT文件中打开50次。正如您所看到的,文件命名非常相似。因此,我想知道是否有一种方法可以通过使用一些技巧来避免重命名,例如: <xsl:if test="not($myKey1=document('fichier1CORR.xml')/Context/descriptor/deleteBB/.|document('f

我制作了一个xslt文件,用另一个文件(
File1CORR.xml
)来更正一个xml文件(
File1.xml
)。 问题是我有50个xml文件要更正,并且我必须重命名文档以在XSLT文件中打开50次。正如您所看到的,文件命名非常相似。因此,我想知道是否有一种方法可以通过使用一些技巧来避免重命名,例如:

<xsl:if test="not($myKey1=document('fichier1CORR.xml')/Context/descriptor/deleteBB/.|document('fichier1CORR.xml')/Context/descriptor/replaceBB/.)">


将被替换为使用concat函数引用输入文件&CORR&.xml?

您可以为xslt提供一个输入参数,并在变量中使用它:

<!-- declare param with default value 1 -->
<xsl:param name="foo" select="1"/>

<!-- concat param $foo to constant file name parts -->
<xsl:variable name="currentCORRFile" select="concat('fichier', $foo, 'CORR.xml')" />

<!-- use current file name -->
<xsl:template match="baz">
    <xsl:copy-of select="document($currentCORRFile)/Context/descriptor/deleteBB/." />
</xsl:template>

将要更正的文件的路径作为外部(全局)参数传递给转换:

<xsl:param name="pFilePath"/>

<xsl:variable name="vDoc" select="document($pFilePath)"/>

<xsl:template match="/">
  <xsl:apply-templates select="$vDoc/node()"/>
</xsl:template>


XSLT2.0允许在一次转换中执行所有XML文档更正。可以从单独的XML文档中读取所有文件路径,并且可以对所有指定的文档进行相同的更正。指令将用于保存每个已更正的XML文档,并继续转换,对其余未处理的文档进行更正。

我尝试过,但我不知道如何操作,我在(第一个)注释中插入了一段摘录您好,谢谢您的回答,但不幸的是,我的更正文件中包含的更正每次都不同…,事实上我有50个filecorr.xml。。。但也许我不明白,抓住这个想法。。。无论如何,再次感谢您的回答:)@user1240544您应该试一试;像Dimitre建议的那样,将文件名列表保存在单独的Xml文档中会使事情比我的解决方案更简单。在任何情况下,将整个文件名作为参数传递都比将其包含(如我所建议的)要简单。@user1240544:我知道更正在时间上是不同的——为什么你认为这个解决方案假设它们不是?没有这样的假设。再次感谢费尔伯特,我会尝试一下,但它似乎就是我想要的:)