Сравнение XML без учета регистра

У меня есть модульное тестовое решение, которое в основном сравнивает два XML-файла, созданных двумя программами diff.

Проблема в том, что один xml имеет 2 значения в нижнем регистре, а другой - в верхнем регистре, как показано ниже.

1-й

<IsMirrored>False</IsMirrored>
<IsVariable>True</IsVariable>

Второй

<IsMirrored>false</IsMirrored>
<IsVariable>true</IsVariable>

Я использую этот метод для сравнения xml:

Assert.AreEqual(originalDoc.OuterXml, newDoc.OuterXml);

но он возвращает false, когда сравнивает значение из-за проблем с нижним и верхним регистром. Как бы я проигнорировал эту проблему с регистром, и он сравнивает только значение?

EDIT: еще одна проблема

Другая проблема: если есть пустой элемент:

1st:

<LinkedObjectName></LinkedObjectName>

2nd:

<LinkedObjectName />

Если я выполню Assert.AreEqual, он будет выполнять посимвольную проверку, и здесь он прерывается.

Как я могу справиться с этим?


person user1535848    schedule 10.09.2012    source источник


Ответы (1)


Не используйте Assert.AreEqual, используйте Assert.IsTrue и String.Equals

Assert.IsTrue(
    String.Equals(
        originalDoc.OuterXml, 
        newDoc.OuterXml, 
        StringComparison.CurrentCultureIgnoreCase))

Изменить:

Для более надежного сравнения двух XML-документов можно попробовать использовать XML Diff и Средство исправления от Microsoft. Инструмент пытается определить, эквивалентно ли содержимое ваших XML-документов, даже в тех случаях, когда простое сравнение строк не удается, например, при различном порядке узлов или атрибутов.

person mclark1129    schedule 10.09.2012
comment
Да, я видел это, и теперь это заботится. Спасибо. Но моя проблема остается, поскольку я нашел еще одну вещь, если есть пустой элемент: 1-й: ‹LinkedObjectName›‹/LinkedObjectName› 2-й: ‹LinkedObjectName /› Если я делаю Assert.AreEqual, он будет выполнять проверку символов и ломается здесь. Как я могу справиться с этим? - person user1535848; 11.09.2012