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

在C#中遍历指定XML并映射数据到Result列表的方法

解决方案

你的代码存在几个问题:

  • 遍历的是RESPONSE元素本身,而非它下面的QUERY*子元素
  • RESPONSE元素没有searched属性,该属性属于每个QUERY1/QUERY2这类子元素
  • QUERY?无法匹配所有以QUERY开头的元素

正确的做法是遍历RESPONSE下所有以QUERY开头的子元素,逐个提取属性和文本值:

方式一:使用foreach循环

List<Result> r = new List<Result>();
XDocument doc = XDocument.Parse(xmlResult);

// 筛选RESPONSE元素下所有名称以QUERY开头的子元素
var queryElements = doc.Descendants("RESPONSE")
                       .Elements()
                       .Where(e => e.Name.LocalName.StartsWith("QUERY"));

foreach (var queryItem in queryElements)
{
    r.Add(new Result
    {
        // 用?.Value避免空引用异常,缺失则设为空字符串
        SearchValue = queryItem.Attribute("searched")?.Value ?? string.Empty,
        SearchResult = queryItem.Value ?? string.Empty
    });
}

方式二:使用LINQ查询直接生成列表(更简洁)

XDocument doc = XDocument.Parse(xmlResult);
List<Result> r = doc.Descendants("RESPONSE")
                    .Elements()
                    .Where(e => e.Name.LocalName.StartsWith("QUERY"))
                    .Select(e => new Result
                    {
                        SearchValue = e.Attribute("searched")?.Value ?? string.Empty,
                        SearchResult = e.Value ?? string.Empty
                    })
                    .ToList();

补充说明

如果需要严格匹配QUERY后跟数字的元素(排除QUERYTEST这类不符合格式的),可以用正则表达式过滤:

.Where(e => Regex.IsMatch(e.Name.LocalName, @"^QUERY\d+$"))

使用前需引用System.Text.RegularExpressions命名空间。

内容的提问来源于stack exchange,提问作者Tayfun Yuksel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:53:10