是否存在以下情况的设计模式:我生成的XML文件可由用户以预定义方式更改(影响属性,而不是整体结构)。在重新生成文件时,我希望重新应用用户执行的更改(如果可能)。
愚蠢的方式(虽然在我的情况下实际实现并非不可能)是将所有用户更改保存为XSLT片段(小模板更改某些XPath表达式标识的某个节点的属性)并使用它来转换新的生成的文件,但我觉得必须有一个更通用的方法。 (文字差异不是我想要的。)
答案 0 :(得分:2)
虽然它不是一个真正的设计模式,但是在这个领域仍然有使用“镜头”概念的积极研究,这是“表现良好的双向转换”(来自the Boomerang site的定义)。
"Combinators for bidirectional tree transformations"论文描述了关键的想法,旧的和谐系统有an archived web site(大约在2008年1月冻结)。
这两个网站都有免费下载(LGPL v2.1)和PDF版本的文件。
答案 1 :(得分:1)
你知道你在生成XSLT片段时处于聪明的领域它是“愚蠢的方式”:)。我倾向于仅将更改存储为单独的XML文档,并使用XSLT作为协调机制,而不是将它们存储为片段。简单的例子:
<library>
<document id="5" title="test" />
</library>
用户更改“title”属性,并在内部生成此文档:
<libraryDelta>
<document id="5">
<title>test</title>
</document>
</libraryDelta>
然后你有了标准的XSLT,它将所有现有元素应用为属性更改。