JavaScript реализация XML различий - PullRequest
2 голосов
/ 13 июня 2009

Существует ли реализация javaScript для обработки различий между данными XML?

Суть в том, чтобы обнаружить наличие разницы, неважно, что было изменено: attribute or node value.

Требования следующие:

  • Каждый узел будет иметь уникальный идентификатор (это одно из упрощений для поиска большего количества библиотек-кандидатов)
  • Дельты должны проверяться в узлах, атрибутах и ​​значениях узлов
  • Поддержка иерархий узлов XML до 3-х уровней
  • Результатом вычисления должен быть также 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 голосов
/ 16 июня 2009

Я не большой пользователь 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, которые могут предоставлять необходимые функции, если кросс-браузерная совместимость не требуется.

...