JavaScript реализация XML различий
Есть ли реализация javaScript для обработки различий между данными XML? Суть в том, чтобы обнаружить наличие разницы, неважно, что было изменено: атрибут или значение узла.
Требования следующие:
- каждый узел будет иметь уникальный идентификатор (это одно из упрощений, чтобы найти больше библиотек-кандидатов)
- дельты должны проверяться в узлах, атрибутах и значениях узлов
- поддержка иерархий узлов 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 ответ
Я не большой пользователь 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, которые могут предоставлять необходимые функции, если кросс-браузерная совместимость не требуется.