2012-12-13 187 views
0

我有一個XML結構是這樣的: -如何從xml c#中刪除節點?

<Person id="1" Name="Rahul lamba" Manager_Id="13" Department="IT" /> 
<Person id="6" Name="Saurabh" Manager_Id="4" Department="IT" /> 
<Person id="5" Name="Amitesh" Manager_Id="6" Department="IT" /> 

現在我想從每一行刪除MANAGER_ID從XML節點。

我嘗試這樣做,但沒有作品出來

XmlNodeList l = doc.GetElementsByTagName("Person"); 

foreach (XmlNode item in l) 
    { 
     foreach (var item1 in item.ChildNodes) 
      { 
       if (item1 == "Manager_Id") 
        { 
         //Code to remove Manager_Id node. 
        } 
      } 
     } 

我怎樣才能做到這一點?

Thanx提前。

+0

你嘗試過什麼樣的代碼,它說'//代碼到所有節點.. .'? –

+0

我還沒有嘗試過任何東西,因爲我沒有在** ChildNodes **上獲得任何東西。 – Rahul

+1

Name,Manager_Id,Department不是節點。這是屬性 –

回答

3

您可以使用LINQ做很容易爲XML,

var xDoc = XDocument.Parse(xmlstring); //XDocument.Load(filename) 

xDoc.Descendants("Person") 
    .Select(x => x.Attribute("Manager_Id")) 
    .Where(x => x!=null) 
    .ToList().ForEach(a => a.Remove()); 

var newxml = xDoc.ToString(); //xDoc.Save(fileName); 
+0

獲取異常**對象引用未在代碼的第二行設置爲實例**。 – Rahul

+0

@Rahul你的xml是一個**根**節點。所以我在測試上面的代碼時添加了一個根節點。另外,請確保所有人員節點都具有'Manager_Id'屬性? –

+0

@Rahul在某些人沒有'Manager_Id'屬性的情況下,我添加了'.Where(x => x!= null)' –

0
XmlTextReader reader = new XmlTextReader(@"C:\MyXml.xml"); 
     reader.Read(); 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(reader); 
     XmlNode node = doc.SelectSingleNode("/Persons/Person[@Manager_Id=6]"); 
     node.ParentNode.RemoveChild(node); 
     reader.Close(); 
     doc.Save(@"D:\MyXml.xml"); 

刪除與ATT

XmlTextReader reader = new XmlTextReader(@"C:\MyXml.xml"); 
     reader.Read(); 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(reader); 
     XmlNodeList lstNode = doc.SelectNodes("/Persons/Person[@Manager_Id]"); 
     foreach (XmlNode node in lstNode) 
     { 
      node.ParentNode.RemoveChild(node); 
     } 
     reader.Close(); 
     doc.Save(@"C:\MyXml.xml");