我有一个XML文件,其中的数据如下:

<?xml version="1.0" encoding="utf-8"?>
<PublisherDatabase xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="4" xmlns="http://www.publictalksoftware.co.uk/msa">
  <Publishers>
    <Publisher>
      <Name>Mr Happy</Name>
    </Publisher>
    <Publisher>
      <Name>Mr Sad</Name>
    </Publisher>
  </Publishers>
</PublisherDatabase>

这是一个片段,减少到了裸露的骨头.

现在,我try 使用LINQ to XML来获取所有Name个值中的List<string>个值.

这将返回0个项目的列表:

XDocument xmlDoc = XDocument.Load(publisherDataPath);
var list = xmlDoc.Root.Elements("Publishers").Elements("Name")
                              .Select(element => element.Value)
                              .ToList();
Console.WriteLine(list.ToString());

我错在哪里?然后我试着:

var list = xmlDoc.Root.Elements("Publishers").Elements("Publisher").Elements("Name")
       .Select(element => element.Value)
       .ToList();
Console.WriteLine(list.ToString());

最后还是0.

推荐答案

这些xml元素属于http://www.publictalksoftware.co.uk/msa xml命名空间.

您必须在LINQ查询中 for each 元素指定一个.

XNamespace ns = "http://www.publictalksoftware.co.uk/msa";
var list = xmlDoc.Root.Elements(ns + "Publishers").Elements(ns + "Publisher").Elements(ns + "Name")
    .Select(element => element.Value)
    .ToList();

Csharp相关问答推荐

无法使用并行库并行化我的代码

Blazor:计算值或保留为默认值

更新数据库中的对象失败,原因是:Microsoft. EntityFrame Core. GbUpdateConcurrencyResponse'

Serilog SQL服务器接收器使用UTC作为时间戳

. NET在上一个操作完成之前,在此上下文实例上启动了第二个操作

Blazor在FluentButton onClick事件上设置参数

Automapper 12.x将GUID映射到字符串

BlockingCollection T引发意外InvalidOperationException

.NET 8 DI GetServices<;对象&>不工作

在try 使用访问服务器上的文件夹时,如何解决CORS错误.NET核心API

WPF DataGrid文件名列,允许直接输入文本或通过对话框按键浏览

错误CS1061';AuthenticationBuilder';不包含AddOpenIdConnect的定义

.Net MAUI,在将FlyoutPage添加到容器之前,必须设置添加构造函数导致Flyout和Detail"

类/值和日期的泛型方法

如何在C#.NET桌面应用程序中动态更改焦点工具上的后退 colored颜色

C#;AvaloniaUI;MVVM;当另一个窗口上的按钮被单击时,如何更新视图图像源?

项目参考和方法签名问题

通过mini kube中的远程调试Pod与从emoteProcessPickerScript中解析错误输出的代码错误进行比较

如果图表S批注包含使用LINQ的具有特定名称的批注,我如何签入C#

默认架构不存在EF核心迁移