【问题标题】:How do delete data using XDocument?如何使用 XDocument 删除数据?
【发布时间】:2013-06-26 19:59:15
【问题描述】:

假设我有一个如下的 xml 文件

<DataBaseServers>
  <DataBaseServer id="1" title="IISDevdb1" address="Address1">
    <DataBases>      
      <database id="1" name="db1" userID="u1" password="p1" />
      <database id="3" name="db3" userID="u3" password="p3" />
    </DataBases>
  </DataBaseServer>
  <DataBaseServer id="2" title="iis2" address="Address2">
  <DataBases>      
      <database id="2" name="db2" userID="u2" password="p2" />    
    </DataBases>
  </DataBaseServer>
</DataBaseServers>

我想删除数据库 id="3"。

生成的 xml 将是

<DataBaseServers>
  <DataBaseServer id="1" title="IISDevdb1" address="Address1">
    <DataBases>      
      <database id="1" name="db1" userID="u1" password="p1" />     
    </DataBases>
  </DataBaseServer>
  <DataBaseServer id="2" title="iis2" address="Address2">
  <DataBases>      
      <database id="2" name="db2" userID="u2" password="p2" />    
    </DataBases>
 </DataBaseServer>
</DataBaseServers>

如果我删除数据库 id="2",xml 将看起来像

<DataBaseServers>
  <DataBaseServer id="1" title="IISDevdb1" address="Address1">
    <DataBases>      
      <database id="1" name="db1" userID="u1" password="p1" />
      <database id="3" name="db3" userID="u3" password="p3" />
    </DataBases>
  </DataBaseServer>
  <DataBaseServer id="2" title="iis2" address="Address2"/>
 </DataBaseServers>

我如何使用 XDocument 来做到这一点?

【问题讨论】:

    标签: c# linq-to-xml


    【解决方案1】:

    好的,我知道了

    xdoc.Descendants("database")
    .Where(xa => xa.Attribute("id").Value == Convert.ToString(3))
    .Remove();
    

    【讨论】:

    • 无需致电Convert.ToString(3)(xa =&gt; xa.Attribute("id").Value == "3") 可以正常工作。
    • 但是请注意,如果您有多个 ID 为“3”的“数据库”元素,它将全部删除。
    【解决方案2】:

    你需要遍历XDocument的元素列表并使用element.Remove();method.as:

    XDocument document = XDocument.Load(Server.MapPath(@"Doc\abc.xml")); ;
            foreach (XElement element in document.Document.Descendants("database").ToList())
            {
                if(element.Attribute("id").Value == Convert.ToString(3))
                element.Remove();
            }
            document.Save(Server.MapPath(@"Doc\abc1.xml"));
    

    Removing nodes from XDocument

    【讨论】:

    • 我想删除数据库 id="3"。那我该怎么做呢?
    • 其实是demo用的,我已经更新了代码,检查一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    相关资源
    最近更新 更多