2013-06-04 30 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选择所有这样的节点。然后删除所有选定的节点。