簡體   English   中英

C#Linq條件獲取XML值

[英]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.value1result.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.

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