Как получить предыдущий брат XElement с соответствующими условиями - PullRequest
0 голосов
/ 30 января 2020

У меня есть некоторые данные в формате 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"
    }
]

Я знаю, что мог сделайте это с foreach, но список элементов довольно большой и я беспокоюсь о производительности . Мне не удалось найти какое-либо решение с использованием LinQ, что было для меня лучшим вариантом.

Кроме того, формат и структура взяты из стороннего источника, поэтому я не могу его изменить.

...