🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #347185

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

#347185
From: 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?
Technical Details
Message-ID: <0d0f4248-57b6-40f1-8542-4f937c3cececn@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 2002:ac8:6bcc:: with SMTP id b12mr3908003qtt.55.1608298894284;        Fri, 18 Dec 2020 05:41:34 -0800 (PST)
X-Received: by 2002:a05:622a:30e:: with SMTP id q14mr4069132qtw.77.1608298893998; Fri, 18 Dec 2020 05:41:33 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi
Date: Fri, 18 Dec 2020 05:41:33 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: google-groups.googlegroups.com; posting-host=109.231.12.10; posting-account=NYnBIQoAAACbAgFhCt3ruVn1tKL-ISNJ
NNTP-Posting-Host: 109.231.12.10
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <0d0f4248-57b6-40f1-8542-4f937c3cececn@googlegroups.com>
Subject: XML, NextSibling i doNodeAutoIndent. Problem z "pustymi"
 węzłami.
From: Andrzej Szumowski <andszum@gmail.com>
Injection-Date: Fri, 18 Dec 2020 13:41:34 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit