AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML-Header auslesen bei IXMLDOMDocument

XML-Header auslesen bei IXMLDOMDocument

Ein Thema von Martin K · begonnen am 12. Dez 2007 · letzter Beitrag vom 19. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

XML-Header auslesen bei IXMLDOMDocument

  Alt 12. Dez 2007, 22:17
Hallo,

habe mich erstmals mit XML in Delphi beschäftigt und mich dabei hauptsächlich an das Tutorial von CalganX gehalten.
Eine Frage habe ich jedoch noch, wenn ich eine XML-Datei per load() lade:
Wie komme ich an die Header-Zeile, also z.B. diese hier:
XML-Code:
<?xml version="1.0" encoding="UTF-8"?>
...
Gibt es hier eine extra Funktion, wie ich diese Attribute auslesen kann (Version, Encoding, etc.)?
Ich nutze IXMLDOMDocument3.

Noch was anderes, was mir aufgefallen ist (hoffe, das ist jetzt nicht zu sehr OT):
Muss man hier das erstellte IXMLDOMDocument nicht irgendwie wieder freigeben?
Funktioniert dies über die Funktion _Release() ?

Danke schonmal für eure Antworten
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: XML-Header auslesen bei IXMLDOMDocument

  Alt 14. Dez 2007, 00:58
* PUSH *
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Neuromancer

Registriert seit: 8. Aug 2003
62 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: XML-Header auslesen bei IXMLDOMDocument

  Alt 17. Dez 2007, 14:25
Hallo,

der XML-Header ist bei einem wohlgeformten XML-Dokument immer der erste Knoten in einem Dokument - zumindest habe ich es noch nie anders gesehen.

Zugriff bekommst du also über
myXMLDocument.childNodes[0]; Die Attribute liest du über
Delphi-Quellcode:
myXMLDocument.childNodes[0].attributes.getNamedItem( 'version' );
myXMLDocument.childNodes[0].attributes.getNamedItem( 'encoding' );
...
usw.
...
aus.


Gruß
  Mit Zitat antworten Zitat
Neuromancer

Registriert seit: 8. Aug 2003
62 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: XML-Header auslesen bei IXMLDOMDocument

  Alt 17. Dez 2007, 14:37
Zitat von Martin K:
Muss man hier das erstellte IXMLDOMDocument nicht irgendwie wieder freigeben?
Nein, das funktioniert über die COM Garbage Collection. IXMLDOMDocument ist ein Interface.

Zitat:
Funktioniert dies über die Funktion _Release() ?
Wenn du das Objekt explizit freigeben willst (beispielsweise um zu verhindern, dass du innerhalb derselben Prozedur nochmals auf das Objekt zugreifen kannst), dann setze es manuell auf nil.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: XML-Header auslesen bei IXMLDOMDocument

  Alt 17. Dez 2007, 14:40
Zitat von Neuromancer:
Zitat von Martin K:
Muss man hier das erstellte IXMLDOMDocument nicht irgendwie wieder freigeben?
Nein, das funktioniert über die COM Garbage Collection. IXMLDOMDocument ist ein Interface.
COM hat keine Gargabe Collection. Das ist die automatische Referenzzählung von Delphi. Deshalb kann man
1, Diese auch unabsichtlich überwinden (und sich über Abstürze wundern)
2, Fehler in Referenzzählung von verwendeten COM-Objekten beheben (z.B. um den IE halbwegs erträglich zu gestalten)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: XML-Header auslesen bei IXMLDOMDocument

  Alt 17. Dez 2007, 23:06
Danke für eure Antworten.

Da ich übermyXMLDocument.documentElement auf den Root-Knoten (und dessen Kinder-Knoten) zugegriffen habe, wusste ich nicht, dass das auch über die childNodes des IXMLDOMDocuments geht. Danke für den Hinweis!

Also ich verstehe noch nicht so ganz, mit:
myXMLDocument := CoDOMDocument60.Create; erzeuge ich doch ein Objekt, dass auf dem Interface basiert.
Warum muss ich dieses Objekt nicht wieder freigeben? Es belegt doch schließlich auch Speicher?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: XML-Header auslesen bei IXMLDOMDocument

  Alt 17. Dez 2007, 23:25
Zitat von Martin K:
Also ich verstehe noch nicht so ganz, mit:
myXMLDocument := CoDOMDocument60.Create; erzeuge ich doch ein Objekt, dass auf dem Interface basiert.
Warum muss ich dieses Objekt nicht wieder freigeben? Es belegt doch schließlich auch Speicher?
Das macht Delphi automatisch für dich. Bei jedem Zuweisen eines Interfacezeiges wird AddRef aufgerufen, bei jeder "nillen" eines Interfacezeigers wird die Release-Methode aufgerufen. Ist nun der Referenzzähler auf 0, so wird das Objekt freigegeben. Ist nicht so "smart" wie ein wirklicher Garbage Collector aber in 99,9% der Fälle ohne Problem zu verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: XML-Header auslesen bei IXMLDOMDocument

  Alt 18. Dez 2007, 14:23
Okay, danke für deine Antwort
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: XML-Header auslesen bei IXMLDOMDocument

  Alt 18. Dez 2007, 16:26
Zitat von Martin K:
Okay, danke für deine Antwort
IXMLDOMDocument* ist von IXMLDOMNode abgeleitet und unterstützt damit auch alle Methoden/Eigenschaften von IXMLDOMNode

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: XML-Header auslesen bei IXMLDOMDocument

  Alt 18. Dez 2007, 23:54
So, nun habe ich aber etwas festgestellt, wo ich mir keinen Reim drauf machen kann:
Delphi-Quellcode:
// Header des geladenen XML-Dokuments:
<?xml version="1.0" encoding="UTF-8"?>


var
  xml: IXMLDOMDocument3;

...

for i := 0 to xml.childNodes[0].attributes.length - 1 do
  // klappt, ich bekomme 'version' und 'encoding' nacheinander angezeigt
  ShowMessage(xml.childNodes[0].attributes[i].nodeName);

// hier bekomme ich nur das hier angezeigt:
// <?xml version="1.0"?>
ShowMessage(xml.childNodes[0].xml);

// klappt dagegen ohne Probleme, auch mit allen Attributen:
ShowMessage(xml.childNodes[1].xml);
Kann mir das einer erklären?
Warum wird mir bei xml.childNodes[0].xml nur das erste Attribut angezeigt?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 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