Linq到XML文件查询不起作用

时间:2014-09-10 06:36:47

标签: c# asp.net-mvc linq-to-xml

这是我的XML文件,我正在使用linq和实体框架

<?xml version="1.0" encoding="utf-8" ?>
<Projects>
  <Project ProjectId="JP001" Country="Canada" ProposedBy="Jim Priac"/>
  <Project ProjectId="KS12" Country="Canada" ProposedBy="Aya Suriour"/>
  <Project ProjectId="ANS16" Country="Malesia" ProposedBy="Gour martin"/>
 <Projects> 

我使用的linq查询是

   IEnumerable<string> Proposed_By = from project in xmldoc.Descendants("Projects").Elements("Project")
                                            where project.Attribute("Country") == "Canada"
                                             select project.Attribute("ProposedBy");

但我没有得到正确的输出

4 个答案:

答案 0 :(得分:1)

您需要比较属性的值,而不是属性本身。

IEnumerable<string> Proposed_By = 
        from project in xmldoc.Descendants("Projects").Elements("Project")
        where project.Attribute("Country").Value == "Canada"
        select project.Attribute("ProposedBy").Value;

我会更进一步,并检查属性是否存在(因为在Value对象上调用null属性会导致异常:

IEnumerable<string> Proposed_By = 
        from project in xmldoc.Descendants("Projects").Elements("Project")
        where project.Attribute("Country") != null 
              & project.Attribute("Country").Value == "Canada"
              & project.Attribute("ProposedBy") != null
        select project.Attribute("ProposedBy").Value;

答案 1 :(得分:0)

首先看看你的文件是否正在上传 对你的linq查询进行更正

XDocument xmldoc = XDocument.Load(Path.GetFullPath("filename"));
    IEnumerable<string> Proposed_By = from project in xmldoc.Descendants("Projects").Elements("Project")
                                    where project.Attribute("Country").Value == "Canada"
                                     select project.Attribute("ProposedBy").Value;

答案 2 :(得分:0)

.Value与属性名称

一起使用

答案 3 :(得分:0)

另一种方式:            如果Value不存在,则返回NULL。

 var Propposed_By = from project in xd.Descendants("Projects").Elements("Project")
                           where project.Attribute("Country").Value == "Canada"
                           select (string)project.Attribute("ProposedBy");