2013-11-03 101 views
1

首先,對不起我的英語不好,我還在學習。所以,我必須根據它們的屬性刪除一個xml文件的特定節點。這是XML文件:如何根據父節點中的屬性刪除特定節點及其子節點?

<?xml version="1.0" encoding="utf-8"?> 
<Lista> 
    <Indice value="8"> 
    <Palavra value="casa" /> 
    <Significados>s1,,,,</Significados> 
    </Indice> 
    <Indice value="49"> 
    <Palavra value="teste" /> 
    <Significados>1,2,,,</Significados> 
    </Indice> 
    <Indice value="72"> 
    <Palavra value="cristiano" /> 
    <Significados>ornelas,ribeiro,,,</Significados> 
    </Indice> 
    <Indice value="72"> 
    <Palavra value="teste2" /> 
    <Significados>s2,s3,,,</Significados> 
    </Indice> 
</Lista> 

我不得不刪除具有例如屬性值=「72」的所有指數之節點和您的兒童。我怎樣才能做到這一點?語言是C#和XML文件後刪除必須留在這個形式:

<?xml version="1.0" encoding="utf-8"?> 
<Lista> 
    <Indice value="8"> 
    <Palavra value="casa" /> 
    <Significados>s1,,,,</Significados> 
    </Indice> 
    <Indice value="49"> 
    <Palavra value="teste" /> 
    <Significados>1,2,,,</Significados> 
    </Indice>  
</Lista> 

回答

2
XDocument xdoc=XDocument.Parse(xmlStr); //or XDocument.Load 

var matchingElements = xdoc.Root 
         .Descendants("Indice") 
         .Where(e => (int)e.Attribute("value") == 72) 
         .ToList(); 
foreach(var elem in matchingElements) 
{ 
    elem.Remove(); 
} 

xdoc.Save(newFileName); 

保存以下文檔:

<Lista> 
    <Indice value="8"> 
    <Palavra value="casa" /> 
    <Significados>s1,,,,</Significados> 
    </Indice> 
    <Indice value="49"> 
    <Palavra value="teste" /> 
    <Significados>1,2,,,</Significados> 
    </Indice> 
</Lista> 
+0

可以使用'matchingElements.Remove()'而不是'foreach' –

0

這是富豪雖然他應該得到一個另類問題回答如果他的作品。

 XmlDocument doc = new XmlDocument(); 
     doc.Load("xml path"); 
     XmlNode node = doc.SelectSingleNode("/Lista"); 
     foreach (XmlNode nodes in node.SelectNodes("Indice/@value")) 
     { 

      if (nodes.Value == "72") 
      { 
       nodes.RemoveAll(); 
      } 
     } 
相關問題