Comment obtenir un élément XML à partir de XDocument en utilisant LINQ?
Supposons que j'ai un XMLDoc nommé XDocument qui est illustré ci-dessous:
<Contacts>
<Node>
<ID>123</ID>
<Name>ABC</Name>
</Node>
<Node>
<ID>124</ID>
<Name>DEF</Name>
</Node>
</Contacts>
XElement Contacts = from xml2 in XMLDoc.Elements("Contacts").Elements("Node")
where xml2.Element("ID").Value == variable
select xml2;
Mais je reçois l'erreur "La référence d'objet n'est PAS à définir ....."
Comment obtenir un Node à partir d'un fichier XML en utilisant LINQ? Et je veux mettre à jour certaines valeurs dans ce nœud?
Comment c'est possible ????
Merci d'avance.........
Réponse à question supplémentaire publiée par OP.
test.xml:
<?xml version="1.0" encoding="utf-8"?>
<Contacts>
<Node>
<ID>123</ID>
<Name>ABC</Name>
</Node>
<Node>
<ID>124</ID>
<Name>DEF</Name>
</Node>
</Contacts>
Sélectionnez un seul nœud:
XDocument XMLDoc = XDocument.Load("test.xml");
string id = "123"; // id to be selected
XElement Contact = (from xml2 in XMLDoc.Descendants("Node")
where xml2.Element("ID").Value == id
select xml2).FirstOrDefault();
Console.WriteLine(Contact.ToString());
Supprimer un seul nœud:
XDocument XMLDoc = XDocument.Load("test.xml");
string id = "123";
var Contact = (from xml2 in XMLDoc.Descendants("Node")
where xml2.Element("ID").Value == id
select xml2).FirstOrDefault();
Contact.Remove();
XMLDoc.Save("test.xml");
Ajouter un nouveau nœud:
XDocument XMLDoc = XDocument.Load("test.xml");
XElement newNode = new XElement("Node",
new XElement("ID", "500"),
new XElement("Name", "Whatever")
);
XMLDoc.Element("Contacts").Add(newNode);
XMLDoc.Save("test.xml");
L'opération .Elements renvoie une LISTE des XElements - mais ce que vous voulez vraiment, c'est un élément SINGLE. Ajoute ça:
XElement Contacts = (from xml2 in XMLDoc.Elements("Contacts").Elements("Node")
where xml2.Element("ID").Value == variable
select xml2).FirstOrDefault();
De cette façon, vous dites à LINQ de vous donner le premier (ou NULL, s'il n'y en a pas) de la LISTE des XElements que vous sélectionnez.
Marc