我有以下的XML结果

<?xml version="1.0" encoding="windows-1254" ?>
<RESPONSE>
  <VALIDATION>1</VALIDATION>
  <QUERY1 searched="12345">0</QUERY1>
  <QUERY2 searched="aaaaa">2</QUERY2>
  <QUERY3 searched="44444">2</QUERY3>
  <QUERY4 searched="99999">0</QUERY4>
  <QUERY5 searched="number">0</QUERY5>
  <QUERY6 searched="bar">0</QUERY6>
  <QUERY7 searched="foo">1</QUERY7>
</RESPONSE>
</xml>

我有下面的课

public class Result{
 public string SearchValue {get;set;}
 public string SearchResult {get;set;}
}

而这段代码

...
List<Result> r = new List<Result>();
XDocument doc = XDocument.Parse(xmlResult);
foreach( var item in doc.Descendants("RESPONSE")){
 r.Add(new Result{
   SearchValue = item.Attribute("searched").Value,
   SearchResult = item.Element("QUERY?").Value
 });
}
...

如何获取所有搜索关键字和搜索结果到列表对象?

推荐答案

您可以将其转换为json对象并使用Linq

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(xmlResult);
    var jObj = JObject.Parse(JsonConvert.SerializeXmlNode(xmlDoc));

    List<Result> results = ((JObject)jObj["RESPONSE"]).Properties()
               .Where(v => v.Name.StartsWith("QUERY"))
               .Select(v => new Result
               {
                   SearchValue = (string)v.Value["@searched"],
                   SearchResult = (string)v.Value["#text"]
               }).ToList();

Csharp相关问答推荐

我们应该如何在IHostedService中使用按请求的GbContent实例?

C#中的包版本控制

.NET框架4.7.2项目如何引用.NET Core 2.2库?

C#将参数传递给具有变化引用的变量

如果属性名为xyz,我需要使用System.Text.Json修改字符串类型的值""<>

try 在Blazor项目中生成html

选取器与.NET Maui MVVM的绑定属性

UWP中的任务和界面

如何在VS代码中为C#DotNet配置.json选项以调试内部终端的控制台应用程序

C#Null判断处理失败

依赖项注入、工厂方法和处置困境

.NET 6:如何防止系统生成的日志(log)?

在C#中,是否有与变量DISARD对应的C++类似功能?

C#LINQ子字符串

Azure Functions v4中的Serilog控制台主题

使用动态键从请求体反序列化JSON

在使用AWS SDK for.NET时,如何判断S3是否已验证我的对象的校验和?

.NET Google Workspace API获取错误CS0266

C#使用相同内存的多个数组

从MudAutoComplete打开对话框,列表仍然可见