使用C#从Linq到XML,如何查找属性值?
我需要使用linq C#获取特定索赔ID=13的所有活动,我正在尝试下面的代码,但它不起作用使用C#从Linq到XML,如何查找属性值?,linq,Linq,我需要使用linq C#获取特定索赔ID=13的所有活动,我正在尝试下面的代码,但它不起作用 XDocument Doc = XDocument.Load(DownloadedPath); var Activites = (from e in Doc.Descendants("Activity") where (string)Doc.Element("Claim").Element("ID") == 13 下面是Xml <?xml ve
XDocument Doc = XDocument.Load(DownloadedPath);
var Activites = (from e in Doc.Descendants("Activity")
where (string)Doc.Element("Claim").Element("ID") == 13
下面是Xml
<?xml version="1.0" encoding="utf-8"?>
<Advice>
<Claim>
<ID>12</ID>
<ProviderID>CL-MC-0012-07</ProviderID>
<Activity>
<ID>20131520320</ID>
<Start>24/07/2013 13:00</Start>
<Type>3</Type>
</Activity>
<Activity>
<ID>20131520321</ID>
<Start>24/07/2013 13:00</Start>
<Type>3</Type>
</Activity>
</Claim>
<Claim>
<ID>13</ID>
<ProviderID>CL-MC-0012-07</ProviderID>
<Activity>
<ID>20132058590</ID>
<Start>20/10/2013 09:00</Start>
<Type>3</Type>
</Activity>
<Activity>
<ID>20132058591</ID>
<Start>20/10/2013 09:00</Start>
<Type>3</Type>
</Activity>
</Claim>
12
CL-MC-0012-07
20131520320
24/07/2013 13:00
3.
20131520321
24/07/2013 13:00
3.
13
CL-MC-0012-07
20132058590
20/10/2013 09:00
3.
20132058591
20/10/2013 09:00
3.
您当前正在将值转换为字符串
,但随后将其与int
进行比较。不要那样做——这不会起作用的:)
将其转换为int
可能是最简单的方法:
var Activites = (from e in Doc.Descendants("Activity")
where (int)Doc.Element("Claim").Element("ID") == 13
...)
接下来,看看您的XML,声明
元素不在活动
元素中。。。你可能只是想:
var activities = doc.Descendants("Claim")
.Where(claim => (int) claim.Element("ID") == 13)
.SelectMany(claim => claim.Elements("Activity"));
这将查找ID为13(其中可能只有一个)的所有
Claim
元素,然后使用SelectMany
选择其活动,这样结果将是一系列活动元素,而不是一系列序列…您的标题将讨论属性。。。但此文档中没有属性。如果你的意思是“元素值”(我怀疑),你应该编辑你的帖子。此外,“它不起作用”永远不能很好地描述所发生的事情。您是否遇到编译时错误?例外?只是没有结果?@AymanJbr:是的-熟悉使用查询表达式和“点表示法”的LINQ很重要。编译器只是将查询表达式转换为“点表示法”。看见