【问题标题】:How to diff two .xml files and store differences in XSLT? [closed]如何区分两个 .xml 文件并在 XSLT 中存储差异? [关闭]
【发布时间】:2015-12-15 20:55:51
【问题描述】:

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

我应该使用哪些命令?

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

即我想要 MS XMLDiffPatch(~2002 年)之类的东西,但使用 XSLT 而不是 Diffgram(Xml Diff 语言)。

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

该领域的一些理论著作:

相关问题:

【问题讨论】:

  • 太板了。您必须定义第一个和第二个文件的模式,然后编写 XSLT 来进行转换。并且没有办法将第二个文件“恢复”回第一个文件。您将不得不为该任务编写另一个 XSLT。
  • 我不需要将第二个文件转换回第一个文件。我想要一个实用程序,它可以创建 .xslt 用于直接从第一个转换到第二个。
  • @ZoffDino,可能存在无损转换之类的东西,在这种情况下可以恢复,但确实需要另一个 XSLT 来完成。
  • 看看 DeltaXML 产品。
  • 亲爱的@user1709408,Abel 的回答是正确的,但也许如果您正在寻找一些有趣的算法,例如最小化更改或类似的,那么cs.stackexchange.com 等着您。

标签: xml xslt-2.0


【解决方案1】:

如果我有 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 及更高版本。

【讨论】:

  • 它不会将第一个文件转换为第二个文件,因为它不包含 .xslt 内部的差异。它只是执行原始复制。
  • 我可以选择任何处理器来应用 .xslt(这是第二步)。
  • @user1709408,是的,所以它将第一个文件转换为第二个文件。没有任何要求,这是我唯一能从你的问题中理解的事情。但是,作为提示,我只是更新了问题并建议使用xsl:apply-templates,其余的都是一样的。
  • 但我想要一个能自动将差异记录到 .xslt 中的实用程序(如 diff)
  • @user1709408,慢慢地你越来越接近你真正想要的。你为什么不重写你的问题,以便它解释你真正想要什么?我不知道期望,但标准的实施依赖于需要它的人。如果没有必要,那么没有人建造它。但请随意这样做。我可能是错的,也许它存在,但我没听说过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
相关资源
最近更新 更多