Шаблон, соответствующий нескольким выходным файлам - PullRequest
1 голос
/ 17 февраля 2011

У меня есть документ XSL, который выводится в HTML. Я хочу запустить пакетный процесс, используя filelist.xml для выполнения этого преобразования для нескольких входных XML-документов с соответствующими выходными html-файлами, как показано ниже:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

<xsl:output method="text" indent="no"/>
<xsl:output method="html" indent="yes" name="html"/>

<xsl:template match="/">
<xsl:for-each select="//*:file">
<xsl:variable select="document(@url)" name="contents" />
<xsl:variable select="replace(@url,'[.]xml','.html')" name="newfile" />
Creating <xsl:value-of select="$newfile" />
<xsl:result-document href="{$newfile}" format="html">
 <html><body>
 Test run: <xsl:value-of select="$contents/testrun/@run" />
 </body></html>
</xsl:result-document>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

Как я могу применить шаблоны к каждому из этих файлов так же, как если бы я обрабатывал один файл? то есть:

<xsl:template match="guidance">

Где «руководством» является корневой узел моего исходного XML. Это неверно, так как мне пришлось бы вложить шаблон. Каков будет правильный подход к этой проблеме?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2011

Как я могу применить шаблоны к каждому из этих файлов, так же, как если бы я был обрабатываете один файл?

Используйте

<xsl:apply-templates select="$contents" mode="fileLevel"/>

и предоставьте все необходимые шаблоны в mode="filelevel" для обработки одного файла.

0 голосов
/ 17 февраля 2011

Где «руководством» является корневой узел моего исходного XML. Это неверно, так как мне пришлось бы вложить шаблон. Каков будет правильный подход к этой проблеме?

Нет ничего плохого в определении правила шаблона с помощью xsl: template match = "direction". Это просто должно следовать обычному принципу XSLT, что все правила шаблона появляются на самом внешнем (глобальном) уровне. Чтобы вызвать шаблон, вы должны сделать что-то вроде xsl: apply-templates select = "document (@href) / direction".

Если вы хотите сделать вещи более модульными, вы можете (а) поместить все правила шаблона для одного типа документа в один модуль таблицы стилей и / или (b) использовать другой режим для правил шаблона для каждого типа документа.

...