使用Linq to XML过滤和复制XML节点



最后,我们的目标是通过比较每个noed属性值与现有值列表,从整个node列表中筛选出一个新的XML文件。我的问题是:我可以读取特定节点的值,然后将其与动态变量值进行比较,但之后我想读取包装它的标签并将其复制到我的新XML文件

<Rule Id="2" On="a1" PL="3305" ActionResult="enabled">
<Members Operation=""><Member QId="a2" Operation="In" Attribute="checked">true
</Member></Members></Rule></Rules> 

和我的代码来获得值比较是:

var ElementsList = from Elements in xdoc.Descendants("Members") 
where Elements.Element("Member").FirstAttribute.Value == "rbtn_G9000_1_11_1201__2" 
select Elements.Element("Member"); 

这将给我节点本身的代码,我需要代码来获得包装节点(规则)…

我该怎么做?

更简洁的查询版本:

var ElementsList = 
    from els in xdoc.Descendants("Members") 
    let member = els.Element("Member")
    where member.FirstAttribute.Value == "rbtn_G9000_1_11_1201__2" 
    select member.Parent

见http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.aspx

更简单(未经测试的代码,猜测预期的属性名称):

// assuming some variable like:
var qid = "rbtn_G9000_1_11_1201__2"; 

var query = string.Format("/Rule/Members/Member[@QId='{0}']/..", qid);
var ElementsList = from member in 
    xdoc.XPathSelectElements(query);

最新更新