[英]C# Linq Get XML Value On Condition
我在查找要使用的正確語法時遇到問題。
我希望下面的代碼能比我用言語更好地說明問題。 我正在嘗試根據匹配條件檢索匿名類型。 我必須首先檢查屬性是否匹配,並且僅在滿足條件時才返回值。 如果該元素具有名為"value1"
的屬性,我將在同一元素上獲取名為"value"
的屬性的"value"
。
我把箭頭<---
表示偽代碼出在哪里。
預先感謝任何可以提供幫助的人。
<item name="DataStore" >
<int name="item1" value="895"/>
<int name="item2" value="245"/>
</item>
<item name="DataStore" >
<int name="item1" value="540"/>
<int name="item2" value="97"/>
</item>
var result = from items in doc.Descendants()
where (string)items.Attribute("name") == "DataStore"
select new {
item1Value = items.Attribute("value").Value, <--- where items.Attribute("name") == "item1" ???
item2Value = items.Attribute("value").Value <--- where items.Attribute("name") == "item2" ???
}
更清楚地說,我需要返回一個具有result.value1
和result.value2
的“元組” result
所以最后我想說些類似的話:
foreach (var item in result) {
Console.WriteLine(item.value1); //Prints 895 on first iteration
Console.WroteLine(item.value2); //Prints 245 on first iteration
}
您需要從找到的與DataStore
匹配的items
中選擇子項目,然后根據您的條件對其進行過濾。
var xml = @"<root><item name=""DataStore"" >
<int name=""item1"" value=""895""/>
<int name=""item2"" value=""245""/>
</item>
<item name=""DataStore"" >
<int name=""item1"" value=""540""/>
<int name=""item2"" value=""97""/>
</item></root>";
var doc = XDocument.Parse(xml);
var result = from items in doc.Descendants()
where (string)items.Attribute("name") == "DataStore"
select new
{
item1Value = (from d in items.Descendants() where d.Attributes("name").FirstOrDefault().Value.Equals("item1") select d.Attributes("value").FirstOrDefault().Value).FirstOrDefault(),
item2Value = (from d in items.Descendants() where d.Attributes("name").FirstOrDefault().Value.Equals("item2") select d.Attributes("value").FirstOrDefault().Value).FirstOrDefault()
};
foreach (var r in result)
{
Console.WriteLine($"Result {r.item1Value} {r.item2Value}");
}
Console.ReadLine();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.