You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:12:03