【问题标题】:a way to avoid to rename the file to open when using document function (XSLT)?使用文档功能(XSLT)时避免重命名要打开的文件的方法?
【发布时间】:2012-03-01 00:08:38
【问题描述】:

我制作了一个 xslt 文件来更正一个 xml 文件 (File1.xml) 和另一个文件 (File1CORR.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 document filenames concat


【解决方案1】:

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

<xsl:param name="pFilePath"/>

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

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

XSLT 2.0 允许在单个转换中执行所有 XML 文档更正。所有文件路径都可以从单独的 XML 文档中读取,并且可以对所有指定的文档进行相同的更正。 &lt;xsl:result-document&gt; 指令将用于保存每个已更正的 XML 文档,并通过更正其余未处理的文档继续进行转换。

【讨论】:

  • 您好,感谢您的回答,但不幸的是,我的更正文件中包含的更正每次都不一样...,实际上我有 50 个 FilesCORR.xml... 但也许我没有得到它,掌握这个想法......无论如何,再次感谢您的回答:)
  • @user1240544 你应该试一试;像 Dimitre 建议的那样,将文件名列表保存在单独的 Xml 文档中会使事情变得比我的解决方案更简单。无论如何,将整个文件名作为参数传递比连接它更简单(就像我建议的那样)。
  • @user1240544:我知道修正在时间上是不同的——为什么你认为这个解决方案假设它们不是?没有做出这样的假设。
【解决方案2】:

您可以为您的 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>

【讨论】:

  • 再次感谢 Filburt,我会试一试,但它似乎是我要找的 :)
猜你喜欢
  • 2016-02-18
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
相关资源
最近更新 更多