首页 > 解决方案 > 如何获得具有匹配条件的前一个 XElement 同级

问题描述

我有一些 XML 格式的数据,其中包含项目列表:

<message>
    <items id="_DD" value="28OCT"/>
    <items id="_PC" value="ABV"/>
    <items id="_CT" value="15H03"/>
    <items id="_CD" value="31OCT"/>
    <items id="_AN" value="5556695"/>
    <items id="_CC" value="PSD"/>
    <items id="_MK" value="OJJ"/>
    <items id="_DT" value="LKM"/>
    <items id="_IT" value="B239"/>
    <items id="_ML" value="4569"/>
    <items id="_TA" value=""/>
    <items id="_P1" value=""/>
    <items id="_MK" value="APK"/>
    <items id="_DT" value="MMK"/>
    <items id="_IT" value="B219"/>
    <items id="_ML" value="0069"/>
    <items id="_RC" value="0"/>
    ...
</message>

大多数项目在它们之间是独立的,但在某些情况下它们是相关的。例如,这些id="_MK"项目标记了一个新类别。

所以我需要制作一个元素列表(id="_ML"例如,带有 ),并且还能够获得它们所属的类别(这是带有 的前一个项目的值id="_MK")。

我如何获得每个项目的价值,他们以前的id="_MK"兄弟姐妹,所以我可以分配类别(该id="_MK"项目的价值)给他们?

对于"_ML"列表,结果应包含:

[
    {
        value: "4569",
        category: "OJJ"
    },
    {
        value: "0069",
        category: "APK"
    }
]

我知道我可以用 a 来做到这一点foreach,但是项目列表非常大,我担心性能。我无法使用 LinQ 找到任何解决方案,这是我心中的最佳选择。

此外,格式和结构来自第三方来源,因此我无法更改。

标签: c#performancelinqxelementsiblings

解决方案


推荐阅读