Общий способ применить XSL ко всем файлам в каталоге? - PullRequest
2 голосов
/ 14 октября 2011

У меня есть XSL, который преобразует файл XML в файл HTML.Работает отлично.Но я хотел бы обратиться к каталогу файлов.В идеале новый файл HTML для каждого файла XML должен быть помещен в тот же каталог.

Я использую Windows XP.У меня есть Cygwin, и я достаточно хорош в сценариях оболочки.Теперь у меня есть саксонцы, но пока я не смог многого добиться.Прямо сейчас я делаю что-то вроде

java -jar settings.saxon_path -t -s:sourceFilepathNormal -xsl:normalizePath(myXSLT) -o:newXMLFilepathNormal

в цикле for для каждого файла в каталоге, но мне это кажется неуклюжим.На самом деле, не похоже, я знаю, это неуклюже.Каким самым элегантным способом вы справитесь с этой задачей с помощью имеющихся под рукой инструментов?

Ответы [ 3 ]

1 голос
/ 14 октября 2011

Вы можете сделать это, используя функцию collection (), как предложено; но в командной строке Saxon есть средство для обработки всего каталога. Просто укажите имя каталога в качестве значения аргумента -s и другой каталог в качестве значения аргумента -o.

Если вы предпочитаете подход с графическим интерфейсом, KernowForSaxon также имеет возможность применять одно и то же преобразование к каждому файлу в папке.

1 голос
/ 14 октября 2011

Это легко сделать в XSLT 2.0 , используя стандартную функцию XPath 2.0 collection() и инструкцию XSLT 2.0 <xsl:result-document>.

Поскольку функция collection() определяется только поверхностно в спецификации W3C, прочитайте больше саксонских битов здесь :

И посмотрите, например, мой ответ на на этот вопрос .

0 голосов
/ 18 октября 2011

Попробуйте:

find . -name *.xml -exec java -jar settings.saxon_path -t -s:{} -xsl:normalizePath(myXSLT) -o:{}.html \;
...