最后,我们的目标是通过比较每个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);