[英]Loop each Items in c# using XElement
我在交換C# XDocument
的Item
列表中的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.