我有10个相同布局的xml文件,需要通过相同的xslt文件对它们进行转换。所以我的问题是: 有没有办法可以将xml文件名作为参数和IN XSLT FILE,它加载那些xml文件并递归转换它们?
通常,xml和xslt通过像这样给出XML文件中的xslt名称来绑定。 这是一对一的关系。 那么在xslt中是否有某种doc函数可以反过来:加载xml XSLT文件中的文件是一对多的关系吗?
一些示例代码将受到高度赞赏!谢谢。
答案 0 :(得分:1)
如果您使用的是XSLT 2,则可以使用索引XML文件:
<?xml-stylesheet href="your-stylesheet.xsl" ?>
<index>
<doc href="doc1.xml" />
<doc href="doc2.xml" />
[...]
</index>
然后使用xsl:result-document写入生成的文件:
<xsl:template match="/index/doc">
<xsl:variable name="target" select="concat(@href, '.result.html')" />
<xsl:result-document href="$target">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Document</title></head>
<body>
<xsl:apply-templates select="document(@href, .)/" />
</body>
</html>
</xsl:result-document>
</xsl:template>
答案 1 :(得分:1)
要使用相同的样式表转换多个文件,通常使用包含要转换的文件的路径的文件作为输入xml。
然后解析输入文件并使用文档功能将模板应用于多个文件。 See my recent answer to this question。这是正确的XSLT 1.0 / 2.0方法。
如果还需要为每个文件生成单独的输出,请使用XSLT 2.0指令xs:result-document
或等效的XSLT 1.0 EXSLT扩展。 See my recent answer to this question
所以最后你可以:
1到1(单输入 - >单输出)
n到1(多次输入document()
- &gt;单次输出)
n到n(多次输入document()
- &gt; xsl:result-document
或扩展名和多输出)
1到n(单输入 - > xsl:result-document
或扩展和多输出)
注意没有递归。
答案 2 :(得分:0)
XSLT具有document
功能,可以加载外部XML文件。
请参阅此问题:How to add an attribute "type" for default data type of elements in XSLT transformation。
在那个答案中,XSD(在你的情况下是你的XML)使用document
在