2013-05-22 99 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);