Я пытаюсь проверить какой-то XML, который используется в программном обеспечении на заказ. Я могу обнаружить изменения в идентичных структурах, используя 'XNode.DeepEquals', а затем добавить дополнительный атрибут к измененным элементам, чтобы я мог выделить их.
Моя проблема в том, что, когда структура действительно меняется, эта методология терпит неудачу. (Я перечисляю оба XElements одновременно, выполняя DeepEquals, если они не равны - рекурсивно вызываю один и тот же метод, чтобы отфильтровать, где происходят точные изменения)
Очевидно, что теперь это разваливается, когда я перечисляю, и сравниваемые узлы не совпадают. Смотрите ниже образец:
До
<?xml version="1.0" encoding="utf-16"?>
<Prices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Price default="true">
<Expression operator="Addition">
<LeftOperand>
<AttributeValue field="ccx_bandwidth" />
</LeftOperand>
<RightOperand>
<Constant value="10" type="Integer" />
</RightOperand>
</Expression>
</Price>
<Price default="false">
<Expression operator="Addition">
<LeftOperand>
<AttributeValue field="ccx_bandwidth" />
</LeftOperand>
<RightOperand>
<Constant value="99" type="Integer" />
</RightOperand>
</Expression>
</Price>
<RollupChildren />
* После 1015 *
<?xml version="1.0" encoding="utf-16"?>
<Prices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Price default="true">
<Expression operator="Addition">
<LeftOperand>
<AttributeValue field="ccx_bandwidth" />
</LeftOperand>
<RightOperand>
<Constant value="10" type="Integer" />
</RightOperand>
</Expression>
</Price>
<RollupChildren />
Итак, вы можете видеть, что последний ценовой узел был удален, и мне нужно показать это изменение.
На данный момент у меня есть доступ к обоим фрагментам xml и я изменяю их при загрузке приложения аудита с помощью атрибута auditchanged, который в моем приложении silverlight также связывает фон с помощью конвертера.
Я играл с Linq в Xml и смотрел на объединение двух XElements в запросе, но не знал, как поступить.
В идеале я хотел бы объединить два элемента XElement вместе, но добавить отдельный атрибут в зависимости от того, был ли он добавлен или удален, и который я затем смогу связать с помощью конвертера, чтобы выделить красный или зеленый цвета соответственно.
У кого-нибудь есть какие-нибудь яркие идеи по этому поводу? (Я смотрел на XmlDiff, но не могу использовать это в Silverlight, не думаю?)