簡體   English   中英

在C#中查詢XML的最佳方法 - 使用LINQ等

[英]Best way to query XML in C# - using LINQ, etc

我有一個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>

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM