在C#中查询XML的最佳方法——使用LINQ等

本文关键字:方法 使用 LINQ 最佳 查询 XML | 更新日期: 2023-09-27 18:23:38

我有一个xml消息需要解析(不控制格式),它看起来像下面的(名称/值对),我需要处理。查询Name=x处的值并获取相关值的最佳方法是什么?

我目前正在使用嵌套选择来尝试从特定的名称/值对中获取值。只是想知道我是否可以使用一个更简单的LINQ/Lambda调用。

如有任何建议,我们将不胜感激。

<Message>
<MessageContent>
  <MessageDetails>
    <Name>System_ID</Name>
    <Value>12345</Value>
  </MessageDetails>
  <MessageDetails>
    <Name>System_Name</Name>
    <Value>Test System</Value>
  </MessageDetails>
</MessageContent>
</Message>

在C#中查询XML的最佳方法——使用LINQ等

使用Linq到XML:

var xml = XElement.Load(someXmlFile);
var results = xml.Descendants("MessageDetails")
                 .Where(m => m.Element("Name").Value == someValue)
                 .Select(m => m.Element("Value").Value);

如果只期望一个匹配,则添加FirstOrDefault()以获得第一个匹配值。

根据您的xml判断,您似乎也可以从投影到字典中受益(如果您的Name元素值是唯一的):

var dictionary = xml.Descendants("MessageDetails")
                    .ToDictionary(x => x.Element("Name").Value, 
                                  x => x.Element("Value").Value);

现在你只需要使用字典:

string value = dictionary["System_ID"];  

如果您无法控制格式,而且将来可能会更改,我也会考虑使用XPath,这样您就可以用更少的代码更改来修改您的选择。例如,获取系统ID的XPath是:

//MessageContent/MessageDetails[Name='System_Name']/Value