1

嗨,我需要删除 XML 文件中的一个项目,我可以毫无问题地添加它,但想知道如何调整文件中的一个项目。我需要删除名称为 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.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 回答
1

使用这个 Xml 库,你可以这样写:

XElement mike = xml.Root.XPathElement("Item[Name='Mike']");
mike.Remove();
于 2012-05-05T23:09:22.580 回答
0

从粗略的一瞥看来,您似乎在尝试两次检索相同的元素。

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

只用一根线怎么样?

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

顺便说一句:我不认识使用的方法,但“名称”可能不是属性,而是元素。

于 2012-05-05T17:25:10.047 回答