LINQを使用してXDocumentからXML要素を取得する方法は?
以下に示すXMLDocという名前のXDocumentがあるとします。
<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;
しかし、「オブジェクト参照を設定しないでください...」というエラーが表示されます。
LINQを使用してXMLファイルから特定のNodeを取得する方法?そして、そのノードのいくつかの値を更新したいですか?
どのように可能ですか????
前もって感謝します.........
追加の質問 への回答は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>
単一のノードを選択:
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());
単一ノードの削除:
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");
新しいノードを追加:
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");
.Elements操作はXElementsのリストを返しますが、本当に必要なのはSINGLE要素です。これを追加:
XElement Contacts = (from xml2 in XMLDoc.Elements("Contacts").Elements("Node")
where xml2.Element("ID").Value == variable
select xml2).FirstOrDefault();
この方法で、LINQに、選択しているXElementのリストから最初(または、存在しない場合はNULL)を提供するように指示します。
マーク