【问题标题】:Delete nodes from XML with attribute and namespace使用属性和命名空间从 XML 中删除节点
【发布时间】:2014-08-20 02:13:05
【问题描述】:

我有下一个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>

我想从每个节点 &lt;mainFile num="&lt;number&gt;"&gt; 中删除 &lt;DE&gt; 内的所有内容 - 仅当它被称为 &lt;DE&gt; 时,如果在示例中像 &lt;TLL&gt; 内的其他节点,请勿触摸它。

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

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

【问题讨论】:

  • 是的,有几种方法可以做到这一点。你已经尝试过什么了吗?
  • 除了暗示给我写这个以外的任何问题
  • 是的,我试过了,我添加了我尝试过的基本内容
  • 您使用您尝试的代码得到的实际错误/输出是什么? (让我猜猜,这可能与&lt;/TLL&gt; 正在暑假有关吗?;)
  • 暑假?什么?

标签: c# xml xml-parsing


【解决方案1】:

你可以试试这样的:

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

      }     
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多