簡體   English   中英

linq到XML skipwhile()takewhile()

[英]linq to xml skipwhile() takewhile()

我有這個XML

<root>
<TR_ZAL IDZ="cOY9" O="0">
</TR_ZAL>
<TR_ZAL IDZ="FOXd" O="10">
</TR_ZAL>
<TR_ZAL IDZ="wAW5" O="1">
<TR_ZAL IDZ="AWak" O="1">
</TR_ZAL>
<TR_ZAL IDZ="XpPp" O="10">
</TR_ZAL>
<TR_ZAL IDZ="asTu" O="10">
</TR_ZAL>
<TR_ZAL IDZ="y9VV" O="1">
</TR_ZAL>
</root>

我知道IDZ "AWak" ,我的任務是獲取具有已知IDZ的元素,然后將其全部獲取,直到下一個具有相同屬性O元素,如果沒有其他元素,則應該獲取所有剩余的元素。 在這種情況下,應該

<TR_ZAL IDZ="AWak" O="1">
</TR_ZAL>
<TR_ZAL IDZ="XpPp" O="10">
</TR_ZAL>
<TR_ZAL IDZ="asTu" O="10">
</TR_ZAL>

所以我嘗試使用linq,但是我找不到我的錯誤,所以有人可以阻止我嗎?

IEnumerable<XElement> rozsah = xmlText.Root.Elements("TR_ZAL")
                  .SkipWhile(x => x.Attribute("IDZ").Value != "AWak")
                  .Take(1)
                  .TakeWhile(x =>Convert.ToInt32(x.Attribute("O").Value) != o);

我想您的XML在此更改下應該是有效的:

<root>
<TR_ZAL IDZ="cOY9" O="0">
</TR_ZAL>
<TR_ZAL IDZ="FOXd" O="10">
</TR_ZAL>
<TR_ZAL IDZ="wAW5" O="1">
</TR_ZAL>
<TR_ZAL IDZ="AWak" O="1">
</TR_ZAL>
<TR_ZAL IDZ="XpPp" O="10">
</TR_ZAL>
<TR_ZAL IDZ="asTu" O="10">
</TR_ZAL>
<TR_ZAL IDZ="y9VV" O="1">
</TR_ZAL>
</root>

如果是這樣,請在下面回答您的問題:

int? o = null;
IEnumerable<XElement> rozsah = xmlText.Root
    // Getting all child 'TR_ZAL' from root object
    .Elements("TR_ZAL")
    // Ignoring until we will not meet TR_ZAL with IDZ == AWak
    .SkipWhile(x => x.Attribute("IDZ").Value != "AWak")
    // Cache the first value of elements in collection and compare each next item
    // we want to take only items which does not have the same value
    .TakeWhile(x =>
        {
            int oAttributeValue = XmlConvert.ToInt32(x.Attribute("O").Value);

            if (!o.HasValue)
            {
                o = oAttributeValue;
                return true;
            }
            else
            {
                return o != oAttributeValue;
            }
        });

您的linq有一個錯誤,即當您找到第一個IDZ = AWak時-下一步是獲取1個元素Take(1) ,因此在Take(1)將僅返回一個元素,因此下一步是TakeWhile(...)使用此一個元素對集合進行操作,而不使用之后的其余元素。

暫無
暫無

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

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