Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Kann ich mit folgender Struktur arbeiten? (https://www.delphipraxis.net/131030-kann-ich-mit-folgender-struktur-arbeiten.html)

Piro 17. Mär 2009 19:19


Kann ich mit folgender Struktur arbeiten?
 
Guten Abend zusammen,

wollte mal nachfragen, ob die folgende XML Struktur machbar ist und wie sie mit IXMLDOMDocument2 bearbeiten kann.

Hier meine Struktur:

SQL-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<netadmin>
   <item>
      <id>1</id>
      <name>Name 1</name>
      <path>Path 1</path>
      <param>Param 1</param>
      <icon>1</icon>
      <category>1</category>
   </item>
   <item>
      <id>2</id>
      <name>Name 2</name>
      <path>Path 1</path>
      <param>Param 2</param>
      <icon>2</icon>
      <category>2</category>
   </item>
   <ping>
      <name>JUN0COSADC1</name>
      <name>HAMN0COSADC2</name>
      <name>JUPRDS10</name>
   </ping>
</netadmin>
Alle item Einträge kommen in VirtualTreeView mit Hilfe einer Type Definition (in Anlehnung an das Tutorial= und alle ping Einträge sollen in ein Memo. Die item Einträge kann ich auslesen und bearbeiten. Das ist alles kein Problem.

Nur die ping Einträge bekomme ich irgendwie nicht hin auch weil sie in einem Memo gespeichern werden. Ich könnte auch bei Sachen trennen und 2 Dateien machen aber das möchte ich ungern. Wäre schön wenn alles in einer XML Datei wäre.

Ist das machbar oder muss ich meine Struktur ändern?

Gruß, Sven

alzaimar 17. Mär 2009 19:43

Re: Kann ich mit folgender Struktur arbeiten?
 
Beantworte Dir die Frage mit einem XML-Validator selbst.

Reinhardtinho 17. Mär 2009 20:20

Re: Kann ich mit folgender Struktur arbeiten?
 
Ich kenne mich zwar nicht mit IXMLDOMDocument2 aus, aber von der Struktur her sieht es passabel aus. Ich arbeite in Delphi immer mit TJvSimpleXML von den JEDIs und da kann man solch ein Struktur problemlos abbilden.

Piro 17. Mär 2009 20:53

Re: Kann ich mit folgender Struktur arbeiten?
 
Ich habe die MS XML 4 Bibliothek eingebunden (IXMLDOMDocument2).

Habe die Validierung durchgeführt und keine Fehler.

Aber wie kann ich nun alle Daten auslesen.

Die item Einträge bekomme ich mit folgendem Code.
Delphi-Quellcode:
xmlDoc : IXMLDOMDocument2;
...
procedure ReadXML
var
 i      : Integer;
 xmldata : IXMLDOMNodeList;
 subNode : IXMLDOMNode;
 Data   : TOData;
begin
 // XML initialisieren
 xmlDoc := CoDOMDocument40.Create;
 xmlDoc.setProperty('NewParser', true);
 if FileExists(AppPath + XML_FNAME) then
   xmlDoc.load(AppPath + XML_FNAME)
 else
   xmlDoc.loadXML('<?xml version="1.0" encoding="ISO-8859-1" ?><netadmin></netadmin>');

 xmldata := xmlDoc.documentElement.selectNodes('item');
 for i:=0 to xmldata.length - 1 do
 begin
   Data := TOData.Create;
   with Data do
   begin
     subNode := xmldata.item[i].selectSingleNode('id');
     id      := subNode.Text;
     subNode := xmldata.item[i].selectSingleNode('name');
     name    := subNode.Text;
     subNode := xmldata.item[i].selectSingleNode('path');
     path    := subNode.Text;
     subNode := xmldata.item[i].selectSingleNode('param');
     param   := subNode.Text;
     subNode := xmldata.item[i].selectSingleNode('icon');
     if subNode.Text <> '' then
       icon  := StrToInt(subNode.Text)
     else
       icon  := -1;
     subNode := xmldata.item[i].selectSingleNode('category');
     if subNode.Text <> '' then
       category := StrToInt(subNode.Text)
     else
       category := 0;
   end;
   vst_data.AddChild(nil, Data);
 end;
end;
Die Daten werden in VirtualTreeView geladen. Wenn ich das nun expliziet für die ping Einträge mache und diese ins Memo lade, liest er nur den 1. Eintrag aus.

Die weitere Frage die sich mir stellt. Wie kann ich auf die ping Einträge zu greifen? Also bearbeiten, wenn ich meine Struktur benutze.

Vielen Dank im voraus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 Uhr.

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