JavaScript实现的XML差异

时间:2009-06-13 12:13:28

标签: javascript xml browser xmldiff

是否有一些javaScript实现来处理XML数据之间的增量?

重点是检测差异的存在,改变的内容无关紧要:attribute or node value.

要求如下:

  • 每个节点都有唯一的ID(这是为了找到更多候选人库而进行的简化之一)
  • 应检查节点,属性和节点值中的Deltas
  • 支持最多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>

1 个答案:

答案 0 :(得分:0)

我不是XSLT的大用户,但我相信如果您熟悉它,我可以用它来实现您想要做的事情。也许您应该尝试在问题中添加标签。

以下XSLT文件取自http://msdn.microsoft.com/en-us/magazine/cc164169.aspx,据说会合并两份文件,但我怀疑它会像你想要的那样彻底:

<xsl:transform version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <Container>
      <xsl:copy-of select="document('product.xml')"/>
      <xsl:copy-of select="document('material.xml')"/>        
    </Container>
  </xsl:template>
</xsl:stylesheet>

该页面上的示例适用于.NET,但Internet Explorer可以访问许多MSXML ActiveX控件,如果不要求跨浏览器兼容性,这些控件可能会提供您需要的功能。