2013-05-22 89 views
2

我有这样如何删除节点标签在XML

<DataBases> 
    <DataBase Name="725" /> 
    <DataBase Name="425"/> 
</DataBases> 

一个XML我想删除名称标签425,使用下面的代码。

XmlDocument document = new XmlDocument(); 
document.Load(fileName); 
XmlNodeList nodes = document.GetElementsByTagName("DataBase"); 
foreach (XmlNode node in nodes) 
{ 
     foreach (XmlAttribute attribute in node.Attributes) 
     { 
      if (attribute.Value == "425") 
      { 
       node.RemoveAll(); 
       break; 
      } 
     } 
} 
document.Save(fileName); 

结果将是:

<DataBases> 
    <DataBase Name="725" /> 
    <DataBase /> 
</DataBases> 

仅删除名称属性,我想删除的数据库标签也。

需要正确的结果是:

<DataBases> 
    <DataBase Name="725" /> 
</DataBases> 

我如何实现这一目标?

+2

'node.ParentNode.RemoveChild(节点);'(代替'node.RemoveAll();')? – Corak

回答

3

您可以使用LINQ to XML来分析和转换xml。实施例中示出下一个:

var xml ="<DataBases>\r\n <DataBase Name=\"725\" />\r\n <DataBase Name=\"425\"/>\r\n</DataBases>"; 
var root = XDocument.Parse(xml); 

//removing all DataBase nodes with Name="425" 
root.Descendants("DataBase") 
    .Where(node => node.Attribute("Name").Value == "425") 
    .Remove(); 

Console.WriteLine (root.ToString()); 

打印:

<DataBases> 
    <DataBase Name="725" /> 
</DataBases> 
1

使用LinqToXml

string xml = @"<DataBases> 
       <DataBase Name=""725"" /> 
       <DataBase Name=""425""/> 
       </DataBases>"; 

var xDoc = XDocument.Parse(xml); 

xDoc.Descendants("DataBase") 
    .First(d => (string)d.Attribute("Name") == "425") 
    .Remove(); 

string newXml = xDoc.ToString(); 
1
XmlDocument document = new XmlDocument(); 
document.Load(fileName); 
XmlNodeList nodes = document.GetElementsByTagName("DataBase"); 
foreach (XmlNode node in nodes) 
{ 
    if (node.GetAttrubute("Name") == "425") 
    { 
     node.ParentNode.RemoveChild(node); 
     break; 
    } 
} 
document.Save(fileName); 
1

在这种情况下负载量的XMLDocument,将字符串转换为XML和XML字符串然后保存文件。

XmlDocument document = new XmlDocument(); 
document.Load(fileName); 
string str = document.OuterXml; 
var root = XDocument.Parse(str); 
root.Descendants("DataBase").Where(node => node.Attribute("Name").Value == "425").Remove(); 
XmlDocument xm = new XmlDocument(); 
xm.LoadXml(root.ToString()); 
xm.Save(fileName); 
0

尝试此,

string fileName = "test.xml"; 
XmlDocument document = new XmlDocument(); 
document.Load("fileName"); 
string name = "425"; 
XmlNode node = document.SelectSingleNode("/DataBases/DataBase[@Name='" + name + "']"); 
if (node != null) node.ParentNode.RemoveChild(node); 
document.Save(fileName);