删除c#中的元素和子节点

时间:2018-03-12 07:24:31

标签: c# xml linq

在我投票之前,我已经看过很多与这个话题相关的帖子。我试过了

  public int deleteMsg(string senderID)
  {
    XDocument xmlDocMsgs = XDocument.Load(XMLLocale);
    XNamespace nameSpace = "http://example.com/Messages";
    XElement queryElementItems =
         xmlDocMsgs.Descendants(nameSpace+"Message").Where(a => a.Element(nameSpace+"senderID").Value == senderID).FirstOrDefault();
    queryElementItems.Remove();
    xmlDocMsgs.Save(XMLLocale);
  }
    //still need to figure out count of how many messages deleted

和Linq

    public int deleteMsg(string senderID)
    {
        int count = 0;
        XDocument xmlDocMsgs = XDocument.Load(XMLLocale);
        XNamespace nameSpace = "http://example.com/Messages";
        IEnumerable<XElement> queryElementItems =
            from item in xmlDocMsgs.Root.Descendants(nameSpace + "Message")
            where item.Element(nameSpace + "senderID").Value == senderID
            orderby (DateTime)item.Element(nameSpace + "TS") descending
            select item;
        foreach(XElement item in queryElementItems)
        {
            item.Remove();
            count++;
        }

        return count;
    }

我的XML表

<Messages xmlns="http://example.com/Messages">
  <Message>
    <SenderID>test</SenderID>
    <ReceiverID>test</ReceiverID>
    <TS>3/11/2018 6:36:33 PM</TS>
    <MessageContents>test</MessageContents>
  </Message>
</Messages>

我正在尝试在visual studio中创建一个简单的消息服务。 我理解如何将数据添加到xml文件中,但我想删除特定senderID中的所有消息。因此,如果senderID.value与参数相同,我想删除消息节点和所有子节点。我在一些帖子中读到,你不能只删除它们必须在列表中的元素。所以我也尝试了实施

var nodesToBeDeleted = queryElementItems.ToList();

然后尝试做我的foreach。每次我测试我的服务时,我都会收到400错误。我对如何实现此方法的想法不足。

0 个答案:

没有答案