Xml 多文件输入?

Xml 多文件输入?,xml,xslt,io,Xml,Xslt,Io,在XSLT文档中,是否可以循环当前目录中的一组文件 我有一种情况,我有一个目录,里面满是xml文件,需要进行一些分析才能生成报告。我的样式表可以在单个文档上运行,但是我想扩展它,而不需要使用其他工具来合并xml文档 我是这样想的: <xsl:for-each select="{IO Selector Here}"> <xsl:variable select="document(@url)" name="contents" /> <!--More st

在XSLT文档中,是否可以循环当前目录中的一组文件

我有一种情况,我有一个目录,里面满是xml文件,需要进行一些分析才能生成报告。我的样式表可以在单个文档上运行,但是我想扩展它,而不需要使用其他工具来合并xml文档

我是这样想的:

<xsl:for-each select="{IO Selector Here}">
    <xsl:variable select="document(@url)" name="contents" />
    <!--More stuff here-->
</xsl:for-each>

我不认为XSL是按这种方式设置的:它被设计用于一个或多个文档上的其他内容,而其他内容将负责查找XSLT应该应用到的文件


如果您有一个主文档和一组固定的支持文档,则可以使用返回特定节点和/或值,但我怀疑您的情况有所不同

在XSLT内部,我认为这是不可能的


您可以将所有XML文件名以逗号分隔的形式传递给一个列表,并使用递归和子字符串-before()和子字符串-after()在其上循环。

我有一个命令行工具可用于此-它使用Ant(java构建工具)中内置的XSLT处理器来处理输入+转换为输出。使用批处理文件进行循环很容易包装


svn://donie.homeip.net/public/tools

在XSLT 2.0和Saxon中,您可以使用
collection()函数执行此操作:

<xsl:for-each select="file:///path/to/directory">
  <!-- process the documents -->
</xsl:for-each>

有关更多详细信息,请参阅


在XSLT1.0中,必须创建一个索引,列出要使用单独工具处理的文档。您的环境可能会提供这样的工具;例如,Cocoon有一个创建此类索引的索引。但是如果不知道您的环境是什么,就很难知道该推荐什么。

正如其他人所说,您不能以独立于平台的方式来推荐。在.NET world中,您可以创建一个自定义XmlResolver,以便文档('dir://c:/foo/')以您希望的任意格式返回“c:\foo”目录中的文件列表。有关自定义XmlResolver的更多信息,请参阅以下链接:


您还可以在XSLT样式表中使用脚本(如元素)或扩展


所有这些方法都会使您的XSLT代码无法移植到其他平台。

如果您使用.Net,则可以使用XsltExtension从XSLT文档调用.Net类中的方法。然后,该方法可以将节点集返回给XSLT。因此,您的方法可以处理文件IO部分