从XmlDocument中删除子节点并包括元素的父节点

时间:2014-10-27 11:34:31

标签: c# xml xmldocument

我的代码看起来像这样。

    public void Delete(Feed item)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("Feed.xml");
        XmlNodeList nodes = doc.SelectNodes("/Feeds/Input");
        foreach (XmlNode noden in nodes)
        {
            if (noden.SelectSingleNode("Id").InnerText == item.Id.ToString())
            {  
                nodes[iterator].RemoveAll();
                noden.RemoveAll();

                break; 
            }
        }
        doc.Save("Feed.xml");
    }

这是我的xml

的一个例子
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Feeds>
  <Input>
    <Name>Examplename</Name>
    <Id>572b9c08-0d76-415d-9b53-ac2e87fceae6</Id>
    <Url>Examppleurl</Url>
    <Category>Logic.Entities.Category</Category>
    <Feed>
      <Id>ExampleID</Id>
      <Title>12. A strange week to be Swedish</Title>
      <Enclosure>example.mp3</Enclosure>
    </Feed>
    <Feed>
      <Id>anotherexampleid</Id>
      <Title>11. The not-Malala-guy</Title>
      <Enclosure>another example.mp3</Enclosure>
    </Feed>
  </Input>
  <Input>
<Feeds>
  <Input>
    <Name>Examplename</Name>
    <Id>572b9c08-0d76-415d-9b53-ac2e87fceae6</Id>
    <Url>Examppleurl</Url>
    <Category>Logic.Entities.Category</Category>
    <Feed>
      <Id>ExampleID</Id>
      <Title>12. A strange week to be Swedish</Title>
      <Enclosure>example.mp3</Enclosure>
    </Feed>
    <Feed>
      <Id>anotherexampleid</Id>
      <Title>11. The not-Malala-guy</Title>
      <Enclosure>another example.mp3</Enclosure>
    </Feed>
  </Input>
  </Input>
</Feeds>

当我像上面的代码一样删除它时,它删除了我想要的那个,但是留下了空的

<input>
</input>

所以我的问题是我想删除空输入......请问我会继续吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您只能使用更具体的XPath选择要删除的<Input>个节点:

string xpath = String.Format("/Feeds/Input[Id='{0}']", item.Id.ToString());
XmlNodeList nodes = doc.SelectNodes(xpath);

然后将其删除:

foreach (XmlNode noden in nodes)
{
    noden.ParentNode.RemoveChild(noden);
}