1

假设我有一个如下的 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 做到这一点?

4

2 回答 2

0

好,我知道了

xdoc.Descendants("database")
.Where(xa => xa.Attribute("id").Value == Convert.ToString(3))
.Remove();
于 2013-06-26T11:44:15.040 回答
0

您需要遍历 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"));

请参阅从 XDocument 中删除节点

于 2013-06-26T11:35:50.730 回答