Сравнение XML-файлов - PullRequest
1 голос
/ 10 мая 2011

Я хочу сравнить только узлы двух XML-файлов, но не значение узлов, использующих c #.Если формат узла в двух файлах не совпадает, то должно появиться сообщение ..

Ответы [ 3 ]

0 голосов
/ 10 мая 2011
        XDocument file1 = XDocument.Load("somefile1.xml");
        XDocument file2 = XDocument.Load("somefile2.xml");
        if (file1.Nodes().Intersect(file2.Nodes()).Count() > 0)
        MessageBox.Show("hey i popped up");

Надеюсь, это поможет ...

0 голосов
/ 10 мая 2011

Предполагая, что под "форматом узла" вы подразумеваете элементы и их имена, это будет проходить по дереву элементов и сравнивать имена:

void Main()
{
    XElement thing = new XElement("test",  new XElement("child") );
    XElement otherThing = new XElement("test",  new XElement("child") );

    var comparer = new XElementComparer();
    var areSame = comparer.Equals(thing, otherThing);

    Console.WriteLine(areSame);
}

class XElementComparer : IEqualityComparer<XElement>
{
    public bool Equals(XElement first, XElement second)
    {
        if (first.Name != second.Name)
            return false;
        else if (!first.Elements().SequenceEqual(second.Elements(), this))
            return false;
        else
            return true;
    }

    public int GetHashCode(XElement element) { return element.GetHashCode(); }
}
0 голосов
/ 10 мая 2011

Я буду использовать Linq to XML:

XDocument doc = XDocument.Parse (data);

var list = doc.DescendantNodes (). Где (i => i - XElement);

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

foreach (элемент var в списке)

{

if (((XElement) item) .Name.LocalName == Propert.Name)
}

но ваша окончательная реализация должна проверить количество узлов и другие проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...