使用xslt 2.0将多个xml文件合并到一个xml文件 - 工作。使用xslt 1.0

时间:2017-03-15 14:27:24

标签: xml xslt

我在一个文件夹中有多个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进行相同的转换。但我收集错误。我如何实现这一目标?任何建议,将不胜感激。感谢。

1 个答案:

答案 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之外的目录(结构)中处理的所有文件。