我有一个XDocument对象,我试图从中提取指定特定条件的所有List。
以下是我的XML
<MyQueue xmlns:ns0 = "http://myprogram">
<ns0:QueueReport>
<ns0:number>001</ns0:number>
<ns0:id>A</ns0:id>
<ns0:name>ABC</ns0:name>
<ns0:hours>1</ns0:hours>
</ns0:QueueReport>
<ns0:QueueReport>
<ns0:number>001</ns0:number>
<ns0:id>B</ns0:id>
<ns0:name>ABC</ns0:name>
<ns0:hours>2</ns0:hours>
</ns0:QueueReport>
<ns0:QueueReport>
<ns0:number>001</ns0:number>
<ns0:id>B</ns0:id>
<ns0:name>ABC</ns0:name>
<ns0:hours>10</ns0:hours>
</ns0:QueueReport>
<ns0:QueueReport>
<ns0:number>002</ns0:number>
<ns0:id>A</ns0:id>
<ns0:name>ABC</ns0:name>
<ns0:hours>12</ns0:hours>
</ns0:QueueReport>
<ns0:QueueReport>
<ns0:number>003</ns0:number>
<ns0:id>A</ns0:id>
<ns0:name>ABC</ns0:name>
<ns0:hours>20</ns0:hours>
</ns0:QueueReport>
</ns0:MyQueue>
上面的XML在XDocument对象中说xdoc。我编写以下内容来提取节点及其子节点。
XNamespace b = @"http://myprogram";
var elements = from e xdoc.Elements(b + "MyQueue")
where e.Element(b + "QueueReport").Element(b + "number").Value == "001"
&& e.Element(b + "QueueReport").Element(b + "id").Value == "B"
select e.Elements(b + "QueueReport").ToList();
(请原谅代码中的拼写错误,但不是在编辑器中写的)
元素变量没有任何结果,理想情况下我希望列表中有以下两个元素。
<ns0:QueueReport>
<ns0:number>001</ns0:number>
<ns0:id>B</ns0:id>
<ns0:name>ABC</ns0:name>
<ns0:hours>2</ns0:hours>
</ns0:QueueReport>
<ns0:QueueReport>
<ns0:number>001</ns0:number>
<ns0:id>B</ns0:id>
<ns0:name>ABC</ns0:name>
<ns0:hours>10</ns0:hours>
</ns0:QueueReport>
请帮忙,我对Linq很新,对于我怎样才能实现这个目标一无所知。
答案 0 :(得分:0)
以下是我的问题的答案,我可以通过一些精神弯曲来解决这个问题。
XNamespace b = @"http://myprogram";
var elements = from e xdoc.Elements(b + "MyQueue").(b + "QueueReport")
where e.Element(b + "number").Value == "001"
&& e.Element(b + "id").Value == "B"
select e;