C# 使用LINQ从XML标签中提取Key-Value键值对问题
你原代码存在两个问题:一是运行时会抛出强制转换无效异常,Select返回的嵌套集合和你声明的List<NameValuePair>返回类型不匹配;二是遍历逻辑没有按照Page1节点配对同级的Key_Head和Key_Title,不符合需求。
调整后的完整代码如下:
void Main() { string xml = @"<root> <Page1> <Key_Head>Name1</Key_Head> <Key_Title>value1</Key_Title> </Page1> <Page1> <Key_Head>Name2</Key_Head> <Key_Title>value2</Key_Title> </Page1> </root>"; var doc1 = XDocument.Parse(xml); List<NameValuePair> result = ConvertXmlToDic(doc1.Root); // 按要求格式输出 foreach (var pair in result) { Console.WriteLine($"({pair.Name},{pair.Value})"); } } private static List<NameValuePair> ConvertXmlToDic(XElement rootElement) { return rootElement // 遍历所有Page1节点 .Elements("Page1") // 每个Page1节点配对取Key_Head和Key_Title的内容 .Select(page => new NameValuePair { Name = page.Element("Key_Head")?.Value ?? string.Empty, Value = page.Element("Key_Title")?.Value ?? string.Empty }) .ToList(); } // 如果你本地没有预定义NameValuePair类,需要补充该定义 public class NameValuePair { public string Name { get; set; } public string Value { get; set; } }
说明
- 代码里加入了空值判断,避免个别
Page1节点缺失对应子标签时抛出空引用异常 - 如果你后续需要用键值对字典做其他处理,直接在返回的
result后调用.ToDictionary(x => x.Name, x => x.Value)即可 - 输出结果完全符合你要的
(Name1,value1)格式
内容的提问来源于stack exchange,提问作者franklin richard
相关产品推荐
相关产品推荐

