2009-07-13 5 views
0

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

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

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, но это, похоже, перезаписывает все ранее написанные материалы.

Спасибо.

+0

Вы ищете универсальное решение или правильную конфигурацию Saxon для добавления? – Yuval

+0

Саксонская конкретная конфигурация была бы прекрасной, если это было возможно. – Steve

ответ

1

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

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

+0

Хорошая точка. Мне нужен атрибут из каждого обработанного входного файла, но я мог бы легко извлечь его, используя язык сценариев, и добавить эту информацию. Благодарю. – Steve

+0

хм .. я пропустил, не пытаюсь решить проблему, которая не существует :-) –

0

В документе 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> 
+0

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

+0

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

+0

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