Подтвердить что ты не робот

Как выбрать конкретный node с LINQ-to-XML

Я могу выбрать первого клиента node и изменить его название компании с помощью кода ниже.

Но как выбрать клиента node, где ID = 2?

    XDocument xmldoc = new XDocument(
        new XDeclaration("1.0", "utf-8", "yes"),
        new XComment("These are all the customers transfered from the database."),
        new XElement("Customers",
            new XElement("Customer",
                new XAttribute("ID", 1),
                new XElement("FullName", "Jim Tester"),
                new XElement("Title", "Developer"),
                new XElement("Company", "Apple Inc.")
                ),
            new XElement("Customer",
                new XAttribute("ID", 2),
                new XElement("FullName", "John Testly"),
                new XElement("Title", "Tester"),
                new XElement("Company", "Google")
                )
            )
        );

    XElement elementToChange = xmldoc.Element("Customers").Element("Customer").Element("Company");
    elementToChange.ReplaceWith(new XElement("Company", "new company value..."));

Ответ:

Спасибо, ребята, для записи, вот точный синтаксис для поиска элемента компании в элементе customer-with-id-2, а затем изменить только значение элемента компании:

XElement elementToChange = xmldoc.Element("Customers")
    .Elements("Customer")
    .Single(x => (int)x.Attribute("ID") == 2)
    .Element("Company");
elementToChange.ReplaceWith(
    new XElement("Company", "new company value...")
    );

ОТВЕТ С СИНТАКСИСОМ МЕТОДА:

Просто вычислил его в синтаксисе метода:

XElement elementToChange = (from c in xmldoc.Element("Customers")
                                .Elements("Customer")
                            where (int)c.Attribute("ID") == 3
                            select c).Single().Element("Company");
4b9b3361

Ответ 1

Предполагая, что идентификатор уникален:

var result = xmldoc.Element("Customers")
                   .Elements("Customer")
                   .Single(x => (int?)x.Attribute("ID") == 2);

Вы также можете использовать First, FirstOrDefault, SingleOrDefault или Where вместо Single для разных обстоятельств.

Ответ 2

Я бы использовал что-то вроде:

dim customer = (from c in xmldoc...<Customer> 
                where c.<ID>.Value=22 
                select c).SingleOrDefault 

Edit:

пропустил тег С#, извините...... пример находится в VB.NET