【发布时间】:2009-06-13 12:13:28
【问题描述】:
是否有一些 javaScript 实现来处理 XML 数据之间的差异?
主要是检测差异的存在,改什么都没关系:attribute or node value.
要求如下:
- 每个节点都有唯一的 ID(这是为查找更多候选库所做的简化之一)
- 应检查节点、属性和节点值中的增量
- 支持最多 3 个级别的 XML 节点层次结构
- 计算结果也应该是 XML(见示例),但可以是添加、更新和删除节点的 3 个数组
- 忽略增量计算中的一些子节点,例如我只想跟踪 3 个层次结构,而不是更多
- 不应将更改检测传播到上层节点,例如子节点更改不应使父节点更新
这是它应该如何工作的示例:
XML#1:
<node id="0">
<node id="1">
<node id="4">
<node id="23">DATA</data>
</node>
<node id="5">DATA</node>
</node>
</node>
XML#2:
<node id="0">
<node id="1">
<node id="3">
<node id="342">DATA</data>
</node>
<node id="5" some_attribute="attr"/>
</node>
<node id="6"/>
</node >
所以结果应该如下:
<result>
<added>
<id>6</id>
<id>3</id>
<id>342</id>
</added>
<updated>
<id>5</id>
</updated>
<removed>
<id>4</id>
<id>23</id>
</removed>
</result>
【问题讨论】:
-
虽然这在 JS 中是绝对可行的,但我怀疑它是否简单、高效或可靠。你能告诉我们为什么需要在 JS 而不是更明显的 XSLT 中这样做吗?
-
也许 XSLT 在某些情况下会很有用,但它需要对我们进行服务器端更改,这是不合适的。我的用例是我们正在使用一些重量级的客户端组件,并且完全重新渲染此类组件很慢。此组件在更改时加载特定的 XML,但它应该只重新呈现更改的部分,而不是完全重新呈现。我正在考虑透明的 Http-proxy 组件某种“增量引擎”,但这是来自不同背景的问题。我将开始新的问题,如果在这里我没有运气。
标签: javascript xml browser xmldiff