🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
1 messages
1 total messages Started by Andrzej Szumowski Fri, 18 Dec 2020 13:41
XML, NextSibling i doNodeAutoIndent. Problem z "pustymi" węzłami.
#347185
Author: Andrzej Szumowski
Date: Fri, 18 Dec 2020 13:41
32 lines
2551 bytes
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 NextSibling'i przy włączonym doNodeAutoIndent?
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads