我在一个文件夹中有多个xml源文件。通过使用下面的xslt,我能够将所有xml文件组合到一个xml文件中。这种转变使用"集合"可在2.0中获得。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml"/>
<xsl:param name="inputFolder">file:\C:\Desktop\RD\XSLTransformationTest\SourceXML</xsl:param>
<xsl:template match="/">
<xsl:variable name="filename" select="translate(concat($inputFolder, '\SingleSource.XML'),'\','/')"/>
<xsl:message><xsl:value-of select="$filename"/></xsl:message>
<xsl:result-document method="xml" href="{$filename}">
<xsl:copy>
<xsl:apply-templates mode="rootcopy"/>
</xsl:copy>
</xsl:result-document>
</xsl:template>
<xsl:template match="node()" mode="rootcopy">
<xsl:copy>
<xsl:variable name="folderURI" select="$inputFolder"/>
<xsl:message><xsl:value-of select="$folderURI"/></xsl:message>
<xsl:for-each select="collection(translate(concat($folderURI, '?select=*.xml;recurse=yes'),'\','/'))/*/node()">
<xsl:apply-templates mode="copy" select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<!-- Deep copy template -->
<xsl:template match="node()|@*" mode="copy">
<xsl:copy>
<xsl:apply-templates mode="copy" select="@*"/>
<xsl:apply-templates mode="copy"/>
</xsl:copy>
</xsl:template>
<!-- Handle default matching -->
<xsl:template match="*"/>
</xsl:stylesheet>
现在我正在尝试使用xslt 1.0进行相同的转换。但我收集错误。我如何实现这一目标?任何建议,将不胜感激。感谢。
答案 0 :(得分:1)
XSLT 1.0中处理多个XML文件的唯一方法是使用document
函数,其参数是一个XML文档,列出了您要处理的文档,例如: <xsl:copy-of select="document(document('doc-list.xml')//file/@src)/*/node()"/>
如果文件doc-list.xml
有例如{} <files><file src="file1.xml"/><file src="file2.xml"/></files>
。您需要创建该特定文件,其中包含要在XSLT之外的目录(结构)中处理的所有文件。