1

我有一个输出到 html 的 XSL 文档。我想运行一个批处理,使用 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>

然后如何将模板应用到这些文件中的每一个,就像我正在处理一个文件一样?IE:

<xsl:template match="guidance">

其中“指导”是我的源 XML 的根节点。这是不正确的,因为我必须嵌套一个模板。解决这个问题的正确方法是什么?

谢谢。

4

2 回答 2

0

其中“指导”是我的源 XML 的根节点。这是不正确的,因为我必须嵌套一个模板。解决这个问题的正确方法是什么?

用 xsl:template match="guidance" 定义模板规则没有任何问题。它只需要遵循通常的 XSLT 原则,即所有模板规则都出现在最外层(全局)级别。要调用模板,您可以执行类似 xsl:apply-templates select="document(@href)/guidance" 的操作。

如果您想让事情变得更加模块化,您可以 (a) 将一种文档类型的所有模板规则放在一个样式表模块中,和/或 (b) 对每种文档类型的模板规则使用不同的模式。

于 2011-02-17T16:12:07.390 回答
0

然后如何将模板应用到这些文件中的每一个,就像我正在处理一个文件一样?

使用

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

并提供任何必要的模板mode="filelevel"来处理单个文件。

于 2011-02-17T16:15:38.897 回答