我认为我的问题很普遍,可以提出这个问题,但具体到足以让所有人都没有问过 - 或者我无法找到它。
任务如下:应用程序的配置存储在XML文档中。从那时起,应用程序不断发展,当前配置存储在不同的XML中。新XML的结构也不同,因此只需复制旧配置就会破坏应用程序。 我们的目标很简单:我们希望将配置更改从旧的XML文档移动到新的XML文档中。我们可以访问:
根据上面的信息,我必须创建新的XML文档,其中重新应用旧xml中的修改。
我已经找到了算法,但我不想在这里重新发明轮子。高级算法如下:
收集的修改的xml布局如下所示:
<xml-diff>
<added-node location="/xpath/to/the/node">
<content-of-the-added-node with="attributes">
<and-sub-elements-as-well/>
</content-of-the-added-node>
</added-node>
<removed-node location="/xpath/to/the/node"/>
<modified-node location="/xpath/to/the/node">
<content-of-the-modified-node>modified-atomic-content</content-of-the-modified-node>
</modified-node>
<added-attribute location="/xpath/to/the/@attribute">value</added-attribute>
<removed-attribute location="/xpath/to/the/@attribute" />
<modified-attribute location="/xpath/to/the/@attribute">new-value</added-attribute>
</xml-diff>
添加节点内容和已修改节点内容都是修改后的旧xml中的节点。
在旧xml中找到修改后,任务非常简单。我可以在新的xml中重新应用修改,其中xpath没有改变。我还有一个映射,它描述了旧的xpath值已更改为新的xpath值,从而正确应用配置更改。 (例如/ root / node1已移至/ root / collections / node1等)
我知道XSLT用于将一个XML转换为另一个XML。这里棘手的部分是检测什么是修改 - 转换是什么。遗憾地处理XML有点棘手,因为节点的顺序并不总是保持不变,但它仍然可能意味着同样的事情。
我的问题是:
请注意,我在XSLT中是全新的。我熟悉XML,对XSD有一些基本的了解。