1

こんにちは、XML ファイル内のアイテムを削除する必要があります。問題なく追加できますが、ファイル内の 1 つのアイテムを調整する方法を知りたいです。Mike という名前と日付を含むアイテムを削除する必要があります。どうすれば削除できますか?

編集:私はNullReferenceException

ここに私のXMLがあります

<Items>
 <Item>
  <Name>Mike</Name>
  <Date>5/4/2000</Date>
 </Item>
 <Item>
  <Name>Martin</Name>
  <Date>5/4/2010</Date>
 </Item>
</Items>

これは私が試しているコードです

public void deleteElement()
    {
        //Get users private store info
        IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
        IsolatedStorageFileStream isoStream;

        //open selected file
        isoStream = new IsolatedStorageFileStream("Item.xml", System.IO.FileMode.Open, System.IO.FileAccess.Read, isoStore);
        XDocument xml = XDocument.Load(isoStream);
        isoStream.Close();

        //Find section
        XElement sectionElement = xml.Descendants("Item").Where(c => c.Attribute("Name").Value.Equals("Mike")).FirstOrDefault();

        //Find item and remove it
        sectionElement.Elements("Item").Where(c => c.Attribute("Name").Value.Equals("Mike")).FirstOrDefault().Remove();
        isoStream.Close();  //Seems unnecessary but it's needed.

        //Write xml file
        isoStream = new IsolatedStorageFileStream("Item.xml", FileMode.Create, FileAccess.Write, isoStore);
        xml.Save(isoStream);
        isoStream.Close();


    }

助けていただければ幸いです。

4

3 に答える 3

1

このXmlライブラリを使用すると、次のように記述できます。

XElement mike = xml.Root.XPathElement("Item[Name='Mike']");
mike.Remove();
于 2012-05-05T23:09:22.580 に答える
1
xml.Root.Elements("Item")
        .Where(item => item.Element("Name").Value == "Mike")
        .FirstOrDefault()
        .Remove();

プロデュース:

<Items>
  <Item>
    <Name>Martin</Name>
    <Date>5/4/2010</Date>
  </Item>
</Items>

いくつかのことに注意してください。

  • 「Item」と呼ばれるルート要素 (「Items」) の下の直接要素の検索を開始しましたが、その子は検索しませんでした。
  • item 要素の下で、関連する値 ("Mike") を持つ"Name"要素(属性ではない) を探します。
于 2012-05-05T21:02:54.040 に答える
0

一見すると、同じ要素を 2 回取得しようとしているように見えます。

// Retrieve the desired Item element
XElement sectionElement = xml.Descendants("Item").Where(c => c.Attribute("Name").Value.Equals("Mike")).FirstOrDefault();
// Retrieve (and remove) the desired Item element
// This line will fail, as there is no Item descendants of the Item element
sectionElement.Elements("Item").Where(c => c.Attribute("Name").Value.Equals("Mike")).FirstOrDefault().Remove();

1行だけ使用するのはどうですか?

xml.Descendants("Item").Where(c => c.Attribute("Name").Value.Equals("Mike")).FirstOrDefault().Remove();

ところで:私は使用されたメソッドを認識していませんが、「名前」はおそらく属性ではなく、要素です。

于 2012-05-05T17:25:10.047 に答える