Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

23 views
Skip to first unread message

Andrzej Szumowski

unread,
Dec 18, 2020, 8:41:34 AM12/18/20
to
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?
0 new messages