Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi ChildNodes innerhalb eines Knoten in der Anordnung tauschen. (https://www.delphipraxis.net/141336-childnodes-innerhalb-eines-knoten-der-anordnung-tauschen.html)

torud 7. Okt 2009 06:57


ChildNodes innerhalb eines Knoten in der Anordnung tauschen.
 
Hallo,

ich würde gern wissen ob es möglich ist bei folgendem Code den Code des ersten Logos mit dem des 2. zu tauschen und wenn ja, wie man das anstellt.

So ist es bisher:
Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8"?>
<Compose>
   <object>
      <typ>TextField</typ>
      <name>nat1</name>
   </object>
   <object>
      <typ>TextField</typ>
      <name>nat2</name>
   </object>
</Compose>

Und so hätte ich es gern:
Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8"?>
<Compose>
   <object>
      <typ>TextField</typ>
      <name>nat2</name>
   </object>
   <object>
      <typ>TextField</typ>
      <name>nat1</name>
   </object>
</Compose>
Hintergrund ist, dass ich viele dieser Objekt-Nodes haben werde und diese in ihrer Anordnung manuell sortieren können muss. Ich möchte in meiner Applikation also einfach nur eines der Items in einem Stringgrid anklicken und um einen Eintrag nach oben/unten verschieben können. Im Hintergrund möchte ich dann die Nodes im XML-Code tauschen.

p80286 7. Okt 2009 13:17

Re: ChildNodes innerhalb eines Knoten in der Anordnung tausc
 
Hallo torud,

auf die Gefahr hin das ich vollkommen falsch liege, aber das ist irgendwie eine Vergewaltigung der ursprünglichen Idee. Denn die Darstellung, so wie Du sie siehst (die Textdarstellung des XML-Files) hat nichts mit der Sortierung/Wertigkeit der Daten zu tun. Das was Du erreichen willst sollte über :
XML-Code:
<Compose>
   <object no='2'>
      <typ>TextField</typ>
      <name>nat1</name>
   </object>
   <object no='1'>
      <typ>TextField</typ>
      <name>nat2</name>
   </object>
</Compose>
funktionieren.

Gruß
K-H

himitsu 7. Okt 2009 13:52

Re: ChildNodes innerhalb eines Knoten in der Anordnung tausc
 
Welche XML-Lib nutzt du denn?
Im Grunde ist es schon möglich, aber es gibt je nach Lib mehrere Möglichkeiten, welche mehr oder weniger umständlich wären.

torud 7. Okt 2009 16:49

Re: ChildNodes innerhalb eines Knoten in der Anordnung tausc
 
Danke für die Antworten.

Aktuell mach ich leider noch mischmasch bestehend aus MSXML2_TLB und XMLDoc, XMLIntf, wobei ich demnächst wohl komplett letzteres nutzen werde.

Zitat:

Zitat von p80286
Hallo torud,
auf die Gefahr hin das ich vollkommen falsch liege, aber das ist irgendwie eine Vergewaltigung der ursprünglichen Idee.

Ja, das kann schon sein. Aber ich finde nicht, dass das Weglassen eines Attributes gleich einer Vergewaltigung von XML nahe kommt! Sicher kann man es auch so machen, aber es ist so, dass der generierte Code von einer anderen Seite abgearbeitet wird und dabei werden auch wieder Controls generiert, die übereinander liegen könnten. Das dabei zuerst erzeugte Control liegt aber immer unten, weshalb ich den XML-Code sortieren will. Der XML-Code in meiner Applikation wird in einem Stringgrid teilweise visualisiert. Da mir keine Sortierfunktion bekannt ist, mit der ich die Nodes nach dem Attribute sortieren könnte, habe ich es so gemacht...

himitsu 7. Okt 2009 17:30

Re: ChildNodes innerhalb eines Knoten in der Anordnung tausc
 
Delphi-Quellcode:
uses XMLIntf;

procedure SwapSubnodes(Node1, Node2: IXMLNode);
var i, i2: Integer;
begin
  i2 := Node2.ChildNodes.Count;
  for i := 0 to Node1.ChildNodes.Count - 1 do
    Node2.ChildNodes.Insert(i2 + i, Node1.ChildNodes[i]);
  for i := 0 to i2 - 1 do
    Node1.ChildNodes.Insert(i, Node2.ChildNodes[i]);
end;

torud 7. Okt 2009 18:23

Re: ChildNodes innerhalb eines Knoten in der Anordnung tausc
 
Danke vielmals. Ich werde es dann gleich mal testen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz