Как рекурсивно загрузить XML-файлы в один файл XSLT? - PullRequest
1 голос
/ 28 июля 2011

У меня есть 10 XML-файлов в одном макете, и мне нужно преобразовать их в один и тот же файл XSLT. Итак, мой вопрос: Есть ли способ, которым я могу взять имя файла XML в качестве параметра и В ФАЙЛЕ XSLT, он загружает эти файлы XML и преобразовывает их рекурсивно?

Потому что обычно xml и xslt связаны, давая имя xslt В ФАЙЛЕ XML следующим образом. И это отношения один на один. Так есть ли какая-то функция doc в xslt, которая может делать наоборот: загрузка xml файлы в файле XSLT в отношении один ко многим?

Некоторые примеры кода будут высоко оценены! Спасибо.

Ответы [ 3 ]

1 голос
/ 28 июля 2011

Если вы используете XSLT 2, вы можете работать с индексным XML-файлом:

<?xml-stylesheet href="your-stylesheet.xsl" ?>
<index>
  <doc href="doc1.xml" />
  <doc href="doc2.xml" />
  [...]
</index>

, а затем используйте xsl: result-document для записи в ваши получившиеся файлы:

<xsl:template match="/index/doc">
  <xsl:variable name="target" select="concat(@href, '.result.html')" />
  <xsl:result-document href="$target">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head><title>Document</title></head>
      <body>
        <xsl:apply-templates select="document(@href, .)/" />
      </body>
    </html>
  </xsl:result-document>
</xsl:template>
1 голос
/ 28 июля 2011

Чтобы преобразовать несколько файлов с одной и той же таблицей стилей, вы обычно используете в качестве входных данных XML-файл, содержащий пути к файлам, которые необходимо преобразовать.

Затем вы анализируете входной файл и применяете шаблоны к нескольким файлам, используя функцию документа. Смотрите мой недавний ответ на этот вопрос .Это правильный подход XSLT 1.0 / 2.0.

Если вам также необходимо сгенерировать отдельный вывод для каждого файла, вы используете инструкцию XSLT 2.0 xs:result-document или эквивалентное расширение XSLT 1.0 EXSLT. Смотрите мой недавний ответ на этот вопрос .

Итак, наконец, вы можете иметь:

  • 1 к 1 (один вход -> один выход)

  • n к 1 (множественный вход с document() -> один выход)

  • n к n (множественный вход с document() ->xsl:result-document или расширение и несколько выходов)

  • 1 до n (один вход -> xsl:result-document или расширение и несколько выходов)

Примечание нет рекурсии.

0 голосов
/ 28 июля 2011

XSLT имеет функцию document, которая может загружать внешние файлы XML.

См. Этот вопрос: Как добавить атрибут "тип" для типа данных по умолчанию для элементов в XSLT-преобразовании . В этом ответе XSD (ваш XML в вашем случае) загружается в XSLT, используя document.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...