способ избежать переименовать файл, чтобы открыть при использовании функции документа (XSLT)? - PullRequest
2 голосов
/ 29 февраля 2012

Я сделал файл 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/.)">

будет заменено ссылкой на входной файл & CORR & .xml, используя, возможно, функцию concat?

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Передайте путь к файлу, который нужно исправить, в качестве внешнего (глобального) параметра преобразования:

<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-документа, и те же исправления могут быть внесены во все указанные документы.Инструкция <xsl:result-document> будет использоваться для сохранения каждого исправленного XML-документа и продолжения преобразования с исправлениями для оставшихся необработанных документов.

0 голосов
/ 29 февраля 2012

Вы можете предоставить входной параметр для вашего 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>
...