【问题标题】:read xml file having namespace in root读取在根目录中具有命名空间的 xml 文件
【发布时间】:2019-04-03 09:25:13
【问题描述】:

我正在尝试从根元素中具有命名空间的 XML 文件中获取每个元素的值,但没有运气。

xml文件的样子

我使用 linq 编写了一些 C# 代码,但没有得到任何结果。

XDocument xdoc = new XDocument();
var doc = XDocument.Load(fileFullPath);
XNamespace ns = "http://www.springframework.net";

var elements = from data in xdoc.Descendants(ns + "Record")
               select new
               {
                   firstName = (string)data.Element(ns + "FirstName").Value,
                   lastName = (string)data.Element(ns + "LastName").Value,
                   id = (string)data.Element(ns + "ID").Value,
                };

foreach (var element in elements)
{
    Console.WriteLine(element.firstName);
    Console.WriteLine(element.lastName);
    Console.WriteLine(element.id);
}

我想要这样的结果

Ram
Brown
22148868

谁能建议或编辑我的代码。

【问题讨论】:

  • 欢迎来到 Stack Overflow。我已经编辑了您的代码,使其格式正确 - 请在提出未来问题时自行使用预览。在您的帖子中将 XML 显示为 text 而不是图像也会很有用。 (例如,这使得其他用户可以轻松地将其复制到 XML 文件中并测试代码。)您的代码有效地期望文件中可能有多个记录,但它实际上是根元素......你有吗一个包含多条记录的文件的示例?

标签: linq c#-4.0


【解决方案1】:

您的 XML 元素http://www.springframework.net 命名空间中 - 它们位于一个空的命名空间中,这就是它们在其中包含 xmlns="" 的原因。

您还有一个错字 - 您有两个 XDocument 变量 - 一个是 xdoc(一个空文档),一个是 doc(您已加载的文档)。您当前的代码正在查询空的代码,这显然是行不通的。我建议你完全摆脱这个变量。

所以您想将代码更改为:

var elements = from data in doc.Descendants(ns + "Record")
               select new
               {
                   firstName = (string) data.Element("FirstName"),
                   lastName = (string) data.Element("LastName"),
                   id = (string) data.Element("ID"),
                };

请注意,我为 Record 元素保留了 ns 部分,因为 is 在命名空间中。我还删除了 Value 属性的使用 - 你要么需要转换元素你需要使用 Value 属性,但不能同时使用。 p>

【讨论】:

  • @User:您没有更新您的帖子以将 XML 包含为文本并没有帮助。为了重现问题并为您提供帮助,我只需要自己手动输入所有内容。我将编辑我的答案,但请帮助我们通过编辑您的帖子以将 XML 包含为 text 来帮助您。如果您显示当前输出也会有所帮助 - 这实际上是它根本没有获取您的记录
猜你喜欢
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多