2

XML データ間のデルタを処理するための JavaScript 実装はありますか?

主なポイントは、違いの存在を検出することです。何が変更されたかは問題ではありません。attribute or node value.

要件は次のとおりです。

  • 各ノードには一意の ID があります (これは、より多くの候補ライブラリを見つけるために行われた単純化の 1 つです)
  • ノード、属性、およびノー​​ド値でデルタをチェックする必要があります
  • 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>
4

1 に答える 1

0

私は の大きなユーザーではありませんXSLTが、使い慣れていれば、目的を達成するために使用できると確信しています。質問にタグを追加してみてください。

http://msdn.microsoft.com/en-us/magazine/cc164169.aspxから取得した次のXSLTドキュメントは、2 つのドキュメントをマージすると思われますが、あなたが望むほど完全であるとは思えません。

<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.

于 2009-06-16T16:01:20.450 に答える