![](/img/trans.png)
[英]Creating a subelement of xml the right way using linq to xml in C#
[英]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.