如何递归加载xml文件到一个共同响应的xslt文件?

时间:2011-07-28 09:30:01

标签: xml xslt

我有10个相同布局的xml文件,需要通过相同的xslt文件对它们进行转换。所以我的问题是:    有没有办法可以将xml文件名作为参数和IN XSLT FILE,它加载那些xml文件并递归转换它们?

通常,xml和xslt通过像这样给出XML文件中的xslt名称来绑定。        这是一对一的关系。    那么在xslt中是否有某种doc函数可以反过来:加载xml    XSLT文件中的文件是一对多的关系吗?

一些示例代码将受到高度赞赏!谢谢。

3 个答案:

答案 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