Mam problem z tranformacją xmla z następującej postaci:
<label align="inline">
Blah
<txt>
<txt-a>
<format param = 'nieok'/>
</txt-a>
<txt-b>Tekst </txt-b>
</txt>
<num>103
<txt>
<txt-a>
<format trans = 'ok'/>
</txt-a>
<txt-b>5</txt-b>
</txt>
.
</num>
</label>
na taką:
<label align="inline">
Blah Tekst 103
<txt>
<txt-a>
<format trans = 'ok'/>
</txt-a>
<txt-b>5</txt-b>
</txt>
.
</label>
Wszystkie txt, które mają txt-a/format [@param], muszą wylecieć. Num też musi wylecieć. Tekst tych node'ów ma jednak zostać.
Node'y txt, które mają txt-a/format[@trans] mają zostać.
Nie wiem kompletnie jak się za to wziąć. Nie mogę po prostu usunąć węzła, bo mi to go usuwa razem z zawartością. Nawet jeśli zachowam sobie zawartość jako string, nie mam pojęcia jak wstawić potem tego stringa w dokładnie to miejsce, z którego usunęłam node'a... Dodanie tekstu po prostu do InnerText doda go na koniec, czyli za kropkę.
Musiałabym więc pobrać najpierw pierwszą część tekstu (....jak?), dodać do tego InnerText pobrany z pierwszego txt, następnie dodać do tego OuterXml następnego txt i na koniec dorzucić resztę tekstu, czyli kropkę.
W powyższym jeszcze pominęłam porzucanie num, ale to po prostu jako krok wcześniej trzeba by wyciągnąć InnerXml z niego i dopiero wtedy dobierać się do reszty.
Czyli moje pytanie brzmi - jak wyciągnąć z XmlNode'a:
- Blah
- .
Dodam, że ten pierwszy txt to może, ale nie musi występować. Po txt a przed numem też może jeszcze się pojawić tekst. Jak sobie uświadamiam mnogość możliwych przypadków, to wydaje mi się, że i pytanie źle zadałam.
Czy jest jakiś sposób w C# na porzucenie określonych node'ów, ale zachowanie ich zawartości (w tym miejscu w którym był node)?