У меня проблемы с поиском чего-нибудь в Linq - может быть, кто-то может дать мне несколько советов.
У меня есть XML, который мне нужно преобразовать в новый XML. Проблема в том, что мне нужно несколько итераций преобразования, чтобы все было правильно.
Источник будет выглядеть примерно так:
<Meals>
<ketchup/>
<steak/>
<mustard/>
<thigh/>
<fillet/>
<penne/>
<drumstick/>
<steak/>
<ketchup/>
<fillet/>
<fillet/>
<macaroni/>
<drumstick/>
<thigh/>
<ketchup/>
<thigh/>
<fillet/>
</Meals>
Что бы я хотел, чтобы это было:
<Meals>
<Meal>
<ketchup/>
<steak/>
<mustard/>
<thigh/>
</Meal>
<Meal>
<fillet/>
<penne/>
<drumstick/>
</Meal >
<Meal>
<steak/>
<ketchup/>
</Meal>
<Meal>
<fillet/>
</Meal>
<Meal>
<fillet/>
<macaroni/>
<drumstick/>
</Meal>
<Meal>
<thigh/>
<ketchup/>
</Meal>
<Meal>
<thigh/>
<fillet/>
</Meal>
</Meals>
Логика здесь такова:
<steak>
и <fillet>
говядина
мясо - все, что происходит раньше
или после них это не говяжье мясо
часть еды до тех пор, пока она не будет частью другой еды. Если мясо говядины происходит после мяса говядины, в элементе нового мяса говядины создается новое блюдо.
<thigh>
и <drumstick>
являются
куриное мясо - все, что происходит
до или после них это не
куриное мясо является частью еды до тех пор, пока оно не является частью другой еды. Если куриное мясо происходит после куриного мяса, то в элементе нового куриного мяса создается новое блюдо.
<macaroni>
и <penne>
- это пасты, все, что происходит до или после них, но не является пастой.
часть еды до тех пор, пока она не будет частью другой еды. Если паста появляется после пасты, то в элементе новой пасты создается новая еда.
<ketchup>
и <mustard>
являются
приправы - они могут быть частью любого
еда.
Я начал с ElementsAfterSelf и ElementsBeforeSelf и TakeWhile, но сталкиваюсь со стенами, понимая, как выполнить вышеизложенное. Я использую VB.NET и Linq, но могу читать C #.
Есть мысли или указатели?