c# - XML LINQ 查询不返回任何内容

标签 c# xml linq null xelement

我正在尝试使用 LINQ 解析 xml 文件,但据我所知,查询返回 null。 (这是WP7) 这是代码:

       var resultQuery = from q in XElement.Parse(result).Elements("Question")
                          select new Question
                          {
                              QuestionId = q.Attribute("id").Value,
                              Type = q.Element("Question").Attribute("type").Value,
                              Subject = q.Element("Subject").Value,
                              Content = q.Element("Content").Value,
                              Date = q.Element("Date").Value,
                              Timestamp = q.Element("Timestamp").Value,
                              Link = q.Element("Link").Value,
                              CategoryId = q.Element("Category").Attribute("id").Value,
                              UserId = q.Element("UserId").Value,
                              UserNick = q.Element("UserNick").Value,
                              UserPhotoURL = q.Element("UserPhotoURL").Value,
                              NumAnswers = q.Element("NumAnswers").Value,
                              NumComments = q.Element("NumComments").Value,
                          };

“result”是xml字符串,就像这个一样。 http://i48.tinypic.com/1ex5s.jpg (无法发布格式正确的文本,所以这是一张图片:P)

错误: http://i48.tinypic.com/2uyk2ok.jpg

抱歉,如果我没有正确解释它并且已经有人问过(尝试搜索但没有帮助)。

最佳答案

您遇到了 XML 命名空间问题。当您只是查询“问题”时,该字符串被翻译成 XName使用默认命名空间。在您的 XML 的默认命名空间中没有元素,只有 urn:yahoo:answers 命名空间中的元素(请参阅顶级元素,其中显示 xmlns="urn:yahoo:answers ").

您需要查询正确的 XML 命名空间,如下所示:

var ns = new XNameSpace("urn:yahoo:answers");
var resultQuery = from q in XElement.Parse(result).Elements(ns + "Question");

在选择单个属性时,请记住还要添加命名空间。

XName是一个表示 XML 名称的类,它可能具有由 XNameSpace 定义的命名空间.这两个类实现了一个隐式转换运算符,允许您将 string 隐式转换为 XName。这就是调用仅通过指定 string 名称来工作的原因,但仅当元素位于默认 namespace 中时。

这种隐含性使得使用 XML namespace 非常容易更容易,但是当人们不知道背后的机制时,它很快就会变得困惑。 XNameclass documentation有一些很好的例子。

关于c# - XML LINQ 查询不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12874027/

相关文章:

entity-framework - 导航属性上的 EF Core 组

c# - 如何为 EF 6、Oracle DB、 Controller 脚手架调试和修复 'Exception has been thrown by the target of an invocation'

c# - 使用带有 ItemRequired = Required.Always 的 Json.Net 反序列化时忽略属性

xml - Gradle zip如何为XML操作添加过滤器

c# - 如何将 XElement 文档记录放入对象列表中

xml - spring-beans-3.1.xsd和spring-beans.xsd的spring xml配置区别

c# - 寻找可能的组合 linq

c# - 如何找到 Windows 7 中任务栏项目的顺序?

c# - 在 Mongodb 中将 JObject 存储为 C# 类的属性

c# - 在 LINQ 中将字符串转换为 DateTime