我需要这个来修补。我无法更改第一个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
答案 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的xslt标记info page there's a listing of a myriad of processors。你可以选择你喜欢的任何一个,不过上面的例子只适用于XSLT 2.0及以上版本。