XML, NextSibling i doNodeAutoIndent. Problem z "pustymi" węzłami.

0

Cześć
Mam taki kawałek kodu:

  XmlDoc := NewXMLDocument;
  with XmlDoc do
    Options := Options + [doNodeAutoIndent];
[...]
  N := Parent.ChildNodes.FindNode('KONTRAHENT');
  while N <> nil do
  begin
    if N.ChildNodes['ID_KONTRAHENTA'].NodeValue = KontrNr then
      zrobCos;
    N := N.NextSibling;
  end;

oraz XML'a w stylu:

<KARTOTEKA_KONTRAHENTOW>
   <KONTRAHENT>
      <ID_KONTRAHENTA>925</ID_KONTRAHENTA>
   </KONTRAHENT>
   <KONTRAHENT>
      <ID_KONTRAHENTA>1208</ID_KONTRAHENTA>
   </KONTRAHENT>
</KARTOTEKA_KONTRAHENTOW>

w Watch'u Parent.XML wygląda tak:

'<KARTOTEKA_KONTRAHENTOW>'#$D#$A#9#9'<KONTRAHENT>'#$D#$A#9#9#9'<ID_KONTRAHENTA>925</ID_KONTRAHENTA>'#$D#$A#9#9'</KONTRAHENT>'#$D#$A#9#9'<KONTRAHENT>'#$D#$A#9#9#9'<ID_KONTRAHENTA>1208</ID_KONTRAHENTA>'#$D#$A#9#9'</KONTRAHENT>'#$D#$A#9'</KARTOTEKA_KONTRAHENTOW>'

I jak w pętli czytam kolejne węzły, to przy ustawionym w Options doNodeAutoIndent mam co drugi węzeł o zawartości: N = '#$D#$A#9#9'

Gdy jest bez doNodeAutoIndent to wszystko jest OK, ale wtedy cały plik po zapisaniu jest w 1 linijce. Mógłbym wprawdzie tworzyć plik przy wyłączonym NodeAutoIndent, a po zapisaniu utworzyć nowy XmlDoc z włączonym NodeAutoIndent i do niego zrobić LoadFromFile(niesformatowany_XML) i ponownie zapisać, ale takie rozwiązanie wydaje mi się bardzo na około.

Ma ktoś z szanownych forumowiczów pomysł, jak ominąć puste NextSiblingi przy włączonym doNodeAutoIndent?

0

No to przecież to są znaki formatowania nowe linia (Windowsowa) #$D i #$A i 3 taby czyli 3 x #$9 to jak bez znaków formatowania chciałeś mieć XML sformatowany? Skąd one w zawartości to nie wiem ale użyj funkcji Trim przy pobieraniu zawartości i powinno być ładnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1