Как сравнить атрибуты XML с Linq для XML? - PullRequest
1 голос
/ 27 августа 2011

У меня есть что-то вроде XML.

<root>
    <element attributeId="1" attribute2="1" attribute3="A" />
    <element attributeId="1" attribute2="2" attribute3="A" />
    <element attributeId="2" attribute2="1" attribute3="A" />
    <element attributeId="3" attribute2="1" attribute3="A" />
    <element attributeId="3" attribute2="1" attribute3="B" />
</root>

Я хочу сравнить атрибуты, которые изменились для элемента с таким же атрибутом attributeId, я создал класс для хранения результатов, который выглядит примерно так:

public class Result
{
    public string AttributeName { get; set; }
    public string OldValue { get; set; }
    public string NewValue { get; set; }
}

Я хочу получить из этого списка результатов, я создал переменную:

List<Result> result;

если я запускаю следующий код:

foreach (Result item in result)
{
    /* Write results */
}

Ожидаемый результат будет:

Attribute2 | 1 | 2 (For ID 1)
Attribute2 | 1 | Null (For ID 2 as there is no value to compare)
Attribute3 | A | B (For ID 3)

Это должно быть выполнено с помощью linq to xml, и я уже знаю о XmlDiff от Microsoft, но этот инструмент для меня не вариант. У меня есть более недели, исследуя и пытаясь решить эту проблему. В идеале количество атрибутов будет меняться, а также их имена, так что если кто-то сможет найти способ сделать то же самое выше для XML, такого как

<root>
    <element attid="1" aa="1" bb="A" cc="X" />
    <element attid="1" aa="2" bb="A" cc="Y" />
    <element attid="2" aa="1" bb="A" cc="X" />
    <element attid="3" aa="1" bb="A" cc="X" />
    <element attid="3" aa="1" bb="B" cc="X" />
</root>

1 Ответ

0 голосов
/ 27 августа 2011

Я думаю, что это невозможно с использованием Linq2xml. Вы можете просто перебрать элементы XML с помощью XmlReader и вручную заполнить свой список .

...