如何将 XML 文件读取到包含 null 元素的空字符串的 Dictionary>

2023-11-30

我有一个 xml 文件,例如:

<root>
  <RowDetails RowName="A" ColumnSize="1">
    <ColumnDetails ColumnName="A1" />
  </RowDetails>
  <RowDetails RowName="B" ColumnSize="2">
    <ColumnDetails ColumnName="B1" />
    <ColumnDetails ColumnName="B2" />
  </RowDetails>
  <RowDetails RowName="C" ColumnSize="3">
    <ColumnDetails ColumnName="C1" />
    <ColumnDetails ColumnName="C2" />
    <ColumnDetails ColumnName="C3" />
  </RowDetails>
</root>

和一个字典,如:

Dictionary<String, List<String>>MyDict = new Dictioanary<String, List<String>>();

我正在读取 XML 文件MyDict就好像:

XDocument XDoc = XDocument.Load(Application.StartupPath + @"\foo.xml");
MyDict = XDoc.Descendants("RowDetails").ToDictionary(X => X.Attribute("RowName").Value, 
                                                     X => X.Descendants("ColumnDetails")
                                                           .Select(Y => Y.Attribute("ColumnName").Value).ToList());

现在词典将包含:

"A"           { "A1" }
"B"           { "B1", "B2" }
"C"           { "C1", "C2", "C3" }

但我的问题是我需要所有具有相同计数的列表。应为空条目添加空字符串,因此预期结果是:

"A"           { "A1", "", "" }
"B"           { "B1", "B2", "" }
"C"           { "C1", "C2", "C3" }

如何修改 LINQ 查询?

请帮助我使用 LINQ 来完成此操作。

提前致谢。


假设您希望将此作为后处理步骤完成MyDict创建后,基本思想是:

  1. 找出每个列表的大小should是(基于最大列表的计数)。
  2. 根据需要用空字符串填充每个列表,使其达到正确的大小。

// The required size is the count of the biggest list
var sizeRequired = MyDict.Values.Max(l => l.Count);

// Pad each list as necessary
foreach (var list in MyDict.Values)
    list.AddRange(Enumerable.Repeat(string.Empty, sizeRequired - list.Count));

这是返回具有所需特征的新字典的方法without改变原始集合:

 // The required size is the count of the biggest list
var sizeRequired = MyDict.Values.Max(l => l.Count);

// Each string key should map to a key in the new dictionary
// Each List<string> value should map to a new list, padded as necessary.
var paddedDict = MyDict.ToDictionary
  (
     kvp => kvp.Key,
     kvp => kvp.Value
               .Concat(Enumerable.Repeat(string.Empty, sizeRequired - kvp.Value.Count))
               .ToList()
  );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 XML 文件读取到包含 null 元素的空字符串的 Dictionary> 的相关文章

  • Web API 复杂参数属性均为 null

    我有一个 Web API 服务调用可以更新用户的首选项 不幸的是 当我从 jQuery ajax 调用中调用此 POST 方法时 请求参数对象的属性始终为 null 或默认值 而不是传入的值 如果我使用 REST 客户端调用相同的方法 我使
  • 如何在 C++ 中的嵌套词法作用域可访问的作用域中声明静态信息?

    我想声明范围的标识符 该标识符将用于自动填充最内部范围内任何日志记录语句的字段 它们通常会 但并非总是如此 例如 lambda 使用 引入的块 匹配封闭块的 名称 用法看起来像这样 namespace app LOG CONTEXT app
  • 在 IEnumerable 中查找相同的集合

    有一项任务要弄清楚如何更新表 DataTable 连接到一个database没有UPDATE陈述 我想出的例子是从邮箱中读取警报 该表将写入 Alerts 如果邮件正文包含单词 SUCCESS gt Alert 变为绿色 如果 FAIL g
  • 字典的线程安全

    如果我有一个 Dictionary
  • XML 和 INI 哪个更快?

    我想知道 XML 是否比 INI 更快 反之亦然 我正在开发一个包含许多文件的网站 这个问题与我的问题有关关于包含许多文件 https stackoverflow com questions 7777522 too many include
  • iPhone 编程游戏

    使用 Objective C 还是 C 为 iPhone 编写游戏最好 像 Flight Control 这样的游戏会用什么语言编写 图形应采用什么格式才能在 iPhone 上正确显示并快速加载 像 Flight Control 这样的游戏
  • C# 从整数反序列化枚举

    是否可以从 C 中的 int 反序列化枚举 例如如果我有以下课程 class Employee public string Name get set public int EmployeeTypeID get set 我可以轻松地从 XML
  • C# 委托实例化与仅传递方法引用 [重复]

    这个问题在这里已经有答案了 我有一个简单的问题 与仅传递函数引用相比 实例化 C 委托有什么优势 我的意思是 Why do Thread t new Thread new ThreadStart SomeObject SomeMethod
  • 终止以 System.Diagnostic.Process.Start("FileName") 启动的进程

    我正在尝试创建一个将在特定时间执行操作的应用程序 很像 Windows 任务计划程序 我当前正在使用 Process Start 来启动任务所需的文件 或 exe 我通过调用文件 mp3 启动一个进程 该进程启动 WMP 因为它是默认应用程
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • 如何使用 Regsvr32 注册 .NET COM DLL?

    我有一个使用 COM DLL 的 VB6 应用程序 该DLL是用C 编写的 在 C 项目属性中 我检查了 Register for COM interop 选项 VB6 应用程序在我的开发机器上运行良好 C 代码完全遵循以下格式 CodeP
  • C# 中 value 为匿名类型的字典

    是否可以在 C 中创建一个System Collections Generic Dictionary
  • 在 C# 中给定周数和年份,计算一周的开始和结束日期(基于 ISO 规范)

    我需要生成一份报告 显示一年中的 52 周 或某些年份的 53 周 及其开始日期和结束日期 有一个 ISO 规范可以做到这一点 但看起来非常复杂 我希望有人知道在 C 或 Visual Basic 中执行此操作的方法 实际上适用于 Visu
  • Parallel ForEach 的本地初始化如何工作?

    我不确定 Parallel ForEach 中本地 init 函数的使用 如 msdn 文章中所述 http msdn microsoft com en us library dd997393 aspx http msdn microsof
  • 在经典 ASP 中的应用程序范围内使用字典对象

    跟进自我的最后一个问题 https stackoverflow com questions 909808 how can i make a variable static or global in classic asp有谁知道如何在经典
  • 为什么 istream/ostream 慢

    于 50 40http channel9 msdn com Events GoingNative 2013 Writing Quick Code in Cpp Quickly http channel9 msdn com Events Go
  • 为 winforms ComboBox 中的单个项目着色?

    我遇到了一个困境 我有一个表单 其中包含许多组合框 其中包含在某些情况下可能无效 过时的信息 选项 项目 我不能简单地从项目中删除过时的信息 但我确实想在选项无效时为用户提供视觉线索 我正在考虑对项目进行着色 可能是红色 来指示它们是否无效
  • wpf中的图像问题(图像不显示)

    我不明白为什么我无法在 WPF 中显示图像 也许我不小心修改了我的资源文件夹 这就是我没有显示的原因 所以我创建了一个新的 wpf 应用程序 我有这个 当我运行该程序时 我的图片显示为 为什么当我尝试在程序中执行相同的操作时 图像没有显示
  • 如何获取打印机设备上下文?

    我在 Windows 上尝试使用以下命令打印增强型图元文件 EMF 播放增强元文件 http msdn microsoft com en us library dd162800 28VS 85 29 aspx 我当前正在使用屏幕上窗口的设备
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐