XSLT добавить к итоговому документу

У меня есть XSLT-скрипт, который я использую для генерации кода, где я обрабатываю несколько входных XML-файлов и выводю файлы в код Javascript. Для каждого входного файла xml я вывожу один файл Javascript.

Итак, у меня будут следующие файлы / преобразования:

view1.xml -> view1.js
view2.xml -> view2.js
...

Теперь у меня есть требование также создать один дополнительный файл во время обработки XSL, где мне нужно будет добавить информацию о каждом обработанном входном файле в общий файл Javascript.

Итак, теперь у меня было бы:

view1.xml -> view1.js / append to common.js 
view2.xml -> view2.js / append to common.js
...

У меня вопрос: можно ли добавить файл во время обработки нескольких входных файлов? В настоящее время я использую Saxon 9.1.0.7, и я посмотрел на элемент xsl: result-document, но он, похоже, перезаписывает любой ранее написанный контент.

Спасибо.


person Steve    schedule 13.07.2009    source источник
comment
Вы ищете универсальное решение или правильную конфигурацию Saxon для включения добавления?   -  person Yuval    schedule 13.07.2009
comment
Если возможно, подойдет специфическая для Saxon конфигурация.   -  person Steve    schedule 13.07.2009


Ответы (2)


Нет, я не думаю, что вы можете добавить к существующему (даже не XML) файлу из XSLT.

С другой стороны, добавление результата в файл легко выполняется в среде, в которой выполняется преобразование. Будь то язык программирования или оболочка, объединение текстовых файлов должно быть тривиальным упражнением. Я предлагаю вам сделать это здесь, вместо того, чтобы пытаться найти способ изменить XSLT, чтобы сделать это.

person Tomalak    schedule 13.07.2009
comment
Хорошая точка зрения. Мне нужен атрибут из каждого обработанного входного файла, но я мог бы легко извлечь его, используя язык сценариев, и добавить эту информацию. Спасибо. - person Steve; 13.07.2009
comment
хм .. Я упустил, не пытайтесь решить проблему, которой не существует :-) - person Ratnesh Maurya; 13.07.2009

В XSLT есть функция «document ()». Вы можете использовать это для обработки нескольких входных файлов xml из одного XSLT и, следовательно, одного вывода, я не уверен, поможет ли это в вашем случае.

что-то вроде.

 <xsl:apply-templates select="document('doc1.xml')"/>
 <xsl:apply-templates select="document('doc2.xml')"/>
 <xsl:apply-templates select="document('doc3.xml')"/>

 <xsl:template match='nodeX">do something</xsl:template>
 <xsl:template match='nodeY">do something else</xsl:template>
person Ratnesh Maurya    schedule 13.07.2009
comment
Я бы предпочел не указывать имена входных файлов. Прямо сейчас я обрабатываю все файлы во входном каталоге и предоставляю выходной каталог для файлов преобразования. Будет создано гораздо больше входных файлов, и я бы предпочел не добавлять элемент document () для каждого нового входного файла. - person Steve; 13.07.2009
comment
для этого вы можете на лету написать другой XML-файл (используя другой скрипт). содержащий имя всех файлов и обработать его и добавить теги document () в цикле в XSLT. Это лучшее, о чем я мог думать на данный момент. :-) - person Ratnesh Maurya; 13.07.2009
comment
Я надеюсь, что будет более простой способ, но похоже, что он мог бы сработать, если бы не было других вариантов. Я использую Ant для преобразования, поэтому я могу просто добавить вызов сценария в сборку и вызвать другое преобразование. Спасибо - person Steve; 13.07.2009