簡體   English   中英

使用XElement循環c#中的每個項目

[英]Loop each Items in c# using XElement

我在交換C# XDocumentItem列表中的id屬性時遇到一些困難。 id是參考。

輸入:

<Items>
    <Item base="book_bookref1_ref1">
        <Name>Test1</Name>
        <Ref>bookref1</Ref>
    </Item>
    <Item base="book_bookref1_ref2">
        <Name>Test2</Name>
        <Ref>bookref1</Ref>
    </Item>
    <Item base="book_bookref2_ref1">
        <Name>Test3</Name>
        <Ref>bookref2</Ref>
    </Item>
    <Item base="book_bookref2_ref2">
        <Name>Test4</Name>
        <Ref>bookref2</Ref>
    </Item>
</Items>

預期產量:

<Items>
    <Item base="book_bookref1_ref1" id="book_bookref1_ref2">
        <Name>Test1</Name>
        <Ref>bookref1</Ref>
    </Item>
    <Item base="book_bookref1_ref2" id="book_bookref1_ref1">
        <Name>Test2</Name>
        <Ref>bookref1</Ref>
    </Item>
    <Item base="book_bookref2_ref1" id="book_bookref2_ref2">
        <Name>Test3</Name>
        <Ref>bookref2</Ref>
    </Item>
    <Item base="book_bookref2_ref2" id="bookref2_ref1">
        <Name>Test4</Name>
        <Ref>bookref2</Ref>
    </Item>
</Items>

有一個標記<Ref> ,其中ex:bookref1值的一部分是對第一項和第二 Item 基本屬性book_bookref1_ref1的引用。

我需要在循環中將第二個“ id”寫入第一Item ,並將第一個id寫入第二Item 同樣,對於第3和第4 Item 可以有很多,但這就像一個組合(1和2、3和4、5和6等)。

這里的問題是可以有多個Item S和存在的沒有關系Item映射的Id屬性。

我正在使用的代碼將XMLDocument加載到XDocument ,從而在LINQ中獲得Item

Var doc = XDocument.Load(xml) 
var ItemsList 
foreach(var itm in ItemsList)
{
    // I'm stuck here. How do we get the id attribute value based on Ref tag?
}

請讓我知道您的建議。

有了一點LINQ(在這個示例中,還有MoreLinq) ,XML的一切都是不可能的:

var xdoc = XDocument.Parse(input);
foreach(var pair in xdoc.XPathSelectElements("Items/Item").Batch(2).ToArray())
{
    pair[0].SetAttributeValue(XName.Get("id"), pair[1].Attribute(XName.Get("base")).Value);
    pair[1].SetAttributeValue(XName.Get("id"), pair[0].Attribute(XName.Get("base")).Value);
}

這不是枚舉每個Item ,也不枚舉每個Item對(一批中的兩個元素)。 您只需要進行調整,以決定如果在循環末尾保留了奇數元素,該怎么辦。

MoreLinq適用於.Batch()擴展方法,但是如果需要,您可以自己編寫。

暫無
暫無

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

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