繁体   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