如何在XSLT中区分两个.xml文件并存储差异?

时间:2015-09-18 16:11:29

标签: xml xslt-2.0

我需要这个来修补。我无法更改第一个xml,但我可以应用.xslt从原始文件创建修补版本。

我应该使用哪些命令?

此外,哪个命令将从第一个xml和xslt创建第二个.xml?

即。我想要像MS XMLDiffPatch(〜2002年),但使用XSLT而不是Diffgram(Xml Diff Language)。

我预计XSLT已经完成了这样的工作。因为对于RFC5261(https://tools.ietf.org/html/rfc5261)它是在2012年(3年前)完成的 - http://github.com/Bonuspunkt/XmlPatch
任何版本的XSLT都是合适的(即2.0,3.0)。

该领域的一些理论着作:

相关问题:   - Track changes to XML file in XSLT format   - How to correctly diff trees (that is, nested lists of strings)?   - Building an HTML Diff/Patch Algorithm   - Diff algorithms   - tree / diff-algorithm   - Detect differences between tree structures   - Diff Algorithm   - Semantic Diff Utilities   - XML Diff and Merge

1 个答案:

答案 0 :(得分:4)

  

如果我有2个.xml文件,如何创建.xslt,它会将第一个文件转换为第二个文件?

这可以通过以下方式完成:

<!-- two XML files -->
<xsl:param name="file1" select="'file1.xml'" />
<xsl:param name="file2" select="'file2.xml'" />

<!-- call with -it main on commandline, will transform file1 into file2 -->
<xsl:template name="main">
    <xsl:result-document href="{$file2}" >
        <xsl:copy-of select="document($file1)" />
    </xsl:result-document>
</xsl:template>

如果您需要对第一个文件进行一些转换,请使用xsl:apply-templates和复制惯用法。

请注意,您无法读取和写入同一文件。因此,如果您还要阅读file2.xml,那么您应该使用不同的URI进行编写。

  

我应该使用哪些命令?任何版本的XSLT都是合适的(即2.0,3.0)。

支持从XSLT 1.0到3.0的标记info page there's a listing of a myriad of processors。你可以选择你喜欢的任何一个,不过上面的例子只适用于XSLT 2.0及以上版本。