2011-02-17 103 views
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> 

我怎样才能再申请模板每个文件,就像我正在处理单个文件一样?即:

<xsl:template match="guidance"> 

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

谢谢。

+0

如果文档filelist.xml是样式表的主要输入文档,那么请向我们展示该文件的示例结构。如果这个文件链接到你想处理的其他文件,那么也向我们展示你想要处理的文件的样本。然后显示您想为每个文件创建的输出示例。目前我不确定问题是什么。您当然可以在样式表中放入一个` ...`,然后将其应用于在`xsl:result-document`里面的`。 – 2011-02-17 15:51:39

回答

0

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

使用xsl:template match =“guidance”定义模板规则没有任何问题。它只需遵循通常的XSLT原则,即所有模板规则都出现在最外层(全局)级别。要调用模板,您可以使用xsl:apply-templates select =“document(@href)/ guidance”。 (a)将一个文档类型的所有模板规则放在一个样式表模块中,和/或(b)为每种文档类型使用不同模式的模板规则。

0

我怎样才能再申请模板这些文件中的每个 ,仿佛我是 处理一个单一的文件一样吗?

使用

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

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