49 votes

Comment sélectionner un nœud spécifique avec LINQ-to-XML

Je peux sélectionner le premier client de nœud et de modifier le nom de son entreprise avec le code ci-dessous.

Mais comment puis-je sélectionner le client nœud where 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..."));

RÉPONSE:

Merci les gars, pour mémoire, voici la syntaxe exacte à la recherche de la société de l'élément dans le client-avec-id-2 élément, et ensuite modifier la valeur de l'élément:

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

RÉPONSE AVEC LA MÉTHODE DE LA SYNTAXE:

Juste pensé à elle au moyen de la syntaxe ainsi:

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

47voto

Mehrdad Afshari Points 204872

En supposant que l'ID est unique:

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

Vous pouvez également utiliser First , FirstOrDefault , SingleOrDefault ou Where , au lieu de Single dans différentes circonstances.

4voto

Nick Points 1156

J'utiliserais quelque chose comme:

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

Modifier:

raté la balise c #, désolé ...... l'exemple est dans VB.NET

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X