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

Как получить XML Node из XDocument

Как получить XML-элемент из XDocument с помощью LINQ?

Предположим, что у меня есть XDocument Named XMLDoc, который показан ниже:

<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;

Но я получаю сообщение об ошибке "Ссылка на объект НЕ устанавливается....."

Как получить конкретный Node из XML файла с помощью LINQ? И я хочу обновить некоторые значения в этом Node?

Как это возможно????

Спасибо заранее.........

4b9b3361

Ответ 1

Ответ на дополнительный вопрос, отправленный 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>

Выберите один node:

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());

Удалите один node:

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");

Добавить новый node:

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");

Там также очень хороший учебник по анализу XML здесь. Надеюсь, что это поможет.

Ответ 2

Операция .Elements возвращает список XElements - но то, что вы действительно хотите, является элементом SINGLE. Добавьте это:

XElement Contacts = (from xml2 in XMLDoc.Elements("Contacts").Elements("Node")
                    where xml2.Element("ID").Value == variable
                    select xml2).FirstOrDefault();

Таким образом, вы указываете LINQ, чтобы дать вам первый (или NULL, если он не существует) из этого СПИСОК XElements, которые вы выбираете.

Марк