2013-06-04 55 views
0

這是我的XML看起來像(是的,我知道XML是醜陋的)。我試圖搜索並從該XDocument中刪除具有isConstField屬性設置爲「Y」的所有節點,而無需遍歷每個單獨的XElement。通過特定的XAttribute搜索未命名的嵌套XElement

<Root> 
    <Node> 
     <SubNode> 
      <SubNode2> 
       <FieldNameA isConstField="Y"></FieldNameA> 
       <FieldNameB></FieldNameB> 
       <FieldNameC isConstField="N"></FieldNameC> 
      </SubNode2> 
     </SubNode> 
     <SubNode> 
      <SubNode2> 
       <FieldNameD></FieldNameD> 
       <FieldNameE></FieldNameE> 
       <FieldNameF></FieldNameF> 
      </SubNode2> 
     </SubNode> 
    </Node> 
</Root> 

這裏是我正在努力做到這一點

XDocument doc = XDocument.Load(@"d:\junk\Test\Test\Data.xml"); 
doc.Descendants("Root").Elements().Where(x => (string)x.Attribute("isConstField") == "Y").Remove(); 
+0

你有什麼問題? – SLaks

回答

1

.Elements()將只返回直接子元素。
你想要.Descendants(),它返回所有嵌套的元素。

0

您可以使用XPath擴展做到這一點(不要忘記加上System.Xml.XPath命名空間參考):

doc.XPathSelectElements("//*[@isConstField='Y']").Remove(); 

表達具有isConstField屬性等於Y任何節點匹配。 XPathSelectElements選擇所有這樣的節點。然後刪除所有選定的節點。