c# - Xml按元素值删除节点

标签 c# .net xml

这是xml文件:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Data>
  <PageInfo>
   <ID>0</ID>
   <NUM>5</NUM>
   <URL>er.php</URL>
  </PageInfo>
  <PageInfo>
   <ID>1</ID>
   <NUM> 12345</NUM>
   <URL>/out/out.ViewFolder.php</URL>
  </PageInfo>
</Data>

我已经尝试了很多方法(现在已经一周了)通过此 xml 文件中的元素(ID、NUM、URL)删除某些节点(PageInfo)。

我尝试过的方法很少:

第一种方法:

  XmlDocument docc = new XmlDocument();
  docc.LoadXml(AppDomain.CurrentDomain.BaseDirectory + "/WebData.xml");
  XmlNode nodee = docc.SelectSingleNode("/Data/PageInfo/ID[2]");
  nodee.RemoveAll();

第二种方法:

  XmlDocument document = new XmlDocument();
  document.Load(AppDomain.CurrentDomain.BaseDirectory + "/WebData.xml");
  XmlNodeList nodes = document.DocumentElement.SelectNodes("/Data/PageInfo");

  string ID, NUM, URL;

  foreach (XmlNode node in nodes)
  {
       ID = node.SelectSingleNode("ID").InnerText;
       NUM = node.SelectSingleNode("NUM").InnerText;
       URL = node.SelectSingleNode("URL").InnerText;
       node.RemoveAll();
       Console.WriteLine(ID + " " + NUM + " " + URL + "\n");
  }

第一个解决方案没有触发异常但没有任何反应,第二个解决方案抛出异常:根级别的数据无效。

如何通过 xml 文件中的元素值删除节点? (LINQ 很好)

免责声明:我在 StackOverflow 上找到的所有解决方案都不适用于我的特定情况。

最佳答案

根据ID,请尝试这个解决方案:

第一种方法

string xml = AppDomain.CurrentDomain.BaseDirectory + "/WebData.xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xml);
XmlNode t = xmlDoc.SelectSingleNode("/Data/PageInfo[ID='0']");
t.ParentNode.RemoveChild(t);
xmlDoc.Save(xml);

第二种方法:Linq

 XDocument xmlDoc =  XDocument.Load(xml);
            var pageInfo = (from xml2 in xmlDoc.Descendants("PageInfo")
                            where xml2.Element("ID").Value == "0"
                            || xml2.Element("NUM").Value == "5"
                            || xml2.Element("URL").Value == "er.php"
                                select xml2).FirstOrDefault();

            pageInfo.Remove();
            xmlDoc.Save(xml);

//输出

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Data>
  <PageInfo>
    <ID>1</ID>
    <NUM> 12345</NUM>
    <URL>/out/out.ViewFolder.php</URL>
  </PageInfo>
</Data>

关于c# - Xml按元素值删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32140840/

相关文章:

C# 使用 linq 查找匹配两个元素级别的 xml 元素

c# - 为什么这个 XML 文件加载缓慢?

c# - 开发 Microsoft Surface 2.0 应用程序时出现 InvalidOperatioException

c# - 在 ASP.Net Core 中使用分页传递模型参数

.Net:如何将类属性转换为输出 xml 元素?

.net - 在 C++ CLI 中调用基构造函数

java - 对具有多个父节点的唯一节点进行编码

c# - 使用被忽略的属性的 QueryOver

c# - 背景图片 PCL xamarin forms iOS 放大

C# 使用多线程或并行执行执行 SQL SP