使用属性和命名空间从XML中删除节点

时间:2014-06-29 15:53:55

标签: c# xml xml-parsing

我有下一个XML文件

<files>
   <mainFile num="333">
      <DE>
        <file>
        </file>
        <file>
        </file>
      </DE>
    </mainFile>

  <mainFile num="444">
     <DE /> 
  </mainFile>

   <mainFile num="555">
     <DE>
        <file>
       </file>
        <file>
       </file>
        <file>
       </file>
    </DE>
  </mainFile>

   <mainFile num="666">
     <TLL>
     </TLL>
   </mainFile>

  </files>

我想从每个节点<mainFile num="<number>">中删除<DE>内的所有内容 - 只有在它被称为<DE>的情况下,如果内部的其他节点如<TLL>在示例中,请勿触摸它。

我的想法是得到这样的东西:

<files>
    <mainFile num="333"> </mainFile> 
    <mainFile num="444"> </mainFile>
    <mainFile num="555"> </mainFile>
    <mainFile num="666">
     <TLL>
     <TLL>
    </mainFile>
 </files>

任何想法如何实施?

我试过了:

            var xmlString = XElement.Parse(xmlString);
            xmlString.XPathSelectElements("//DE").Remove();

xmlString .Element("DE").Remove();

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);

    XmlNodeList nodeList;
    XmlNode root = doc.DocumentElement;

    nodeList=root.SelectNodes("descendant::mainFile");

foreach (XmlNode n in nodeList)
    {
      XmlNodeList des = n.SelectNodes("descendant::DE");
      foreach (XmlNode de in nodeList)
      {
        de.ParentNode.RemoveChild(de); 

      }     
    }