2014-01-13 117 views
-1

假設我有以下XML:通過了解屬性值刪除嵌套的XML *元素

<Chapter Name="Introduction" > 
    <Overview caption="Simple" > 
     <Property name="ElementID" value="1" /> 
     <Property name="Summary" value="no" /> 
     <Overview caption="Simple" > 
      <Property name="ElementID" value="2" /> 
     </Overview> 
     <Property name="ElementID" value="37" /> 
     <Property name="ElementID" value="38" /> 
     <Property name="Summary" value="no" /> 
    </Overview> 
    </Overview> 
    </Overview> 
</Chapter> 

我曾嘗試:

private static void RemoveNode(XElement root) 
    { 
     var query = root.Elements("Overview") 
      .Where(p => p.Element("Overview").Element("Property").Attribute("name").Value == "ElementID") 
      .Select(x => x.Nodes().ElementAt(0)); 
     //.Remove(); 
     query.Remove(); 
      if (query.Any()) 

     RemoveNode(root); 
    } 

我需要刪除所有節點/元素具有屬性[名稱]與值= 「ElementID」 使用C#

+4

到目前爲止您嘗試了哪些代碼? –

+0

檢查你的樣品。 XML代碼不一致。 – VVS

回答

0

使用LinqToXml

var doc = XDocument.Load("YourFile"); 

var q = doc.Descendants().Where(x => x.Attribute("Name") != null && "ElementID" == (string)x.Attribute("values")); 

foreach (var item in q) item.Remove(); 

doc.Save("YourFile"); 
+1

如果你正在使用''(string)x.Attribute(「values」)',你不需要使用'.Value' –

0
var query = root.Descendants() 
       .Where(x => (string)x.Attribute("name") == "ElementID") 
       .ToList() 
       .ForEach((x) => x.RemoveAll()); 
root.Save(path); 
+0

ForEach && RemoveAll? – dovid

+0

要刪除選定的元素,''我需要刪除所有節點/元素具有屬性..'' –

+0

RemoveAll不刪除元素本身,只有後代。改用刪除 – dovid