AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi OpenXML: Leeres XML-Element -> Exception
Thema durchsuchen
Ansicht
Themen-Optionen

OpenXML: Leeres XML-Element -> Exception

Ein Thema von Mr.AndersoN · begonnen am 16. Jan 2007 · letzter Beitrag vom 16. Jan 2007
Antwort Antwort
Mr.AndersoN

Registriert seit: 31. Dez 2006
3 Beiträge
 
#1

OpenXML: Leeres XML-Element -> Exception

  Alt 16. Jan 2007, 17:13
Hallo,

ich benutze für mein aktuelles Projekt OpenXML um die Datenanbindung zu realisieren.
Soweit habe ich bis jetzt keine Probleme, jedoch bin ich vor kurzem auf eins gestoßen:
Sobald ich ein leeres Element in der zu lesenden XML-Datei habe, wirft der Debugger mir eine Exception aus, die mich auf eine Zugriffsverletzung hinweist.
Dabei ist es egal, ob das Element die Form <element></element> oder die Form <element /> besitzt.

Nun fand ich Lösungen für das Problem nur für andere XML-Parser nicht jedoch für OpenXML - siehe hier.

Hier noch der Code, welchen ich zum Auslesen verwende:
Doc.GetElementsByTagName('leeres_xml_element').Item(0).ChildNodes.Item(0).NodeValue;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: OpenXML: Leeres XML-Element -> Exception

  Alt 16. Jan 2007, 17:18
Greif nicht direkt auf die gesamte Struktur zu, sondern etappenweise. Das du eine AV bekommst ist soweit recht verständlich, oder kannst du sicherstellen, dass...

a) Doc.GetElementsByTagName('leeres_xml_element').Ite m(0) eine Instanz zurückliefert, welche nicht Nil ist?
b) Doc.GetElementsByTagName('leeres_xml_element').Ite m(0).ChildNodes.Item(0) eine Instanz zurückliefert, welche nicht Nil ist?

Prüfe dieses beim Zugriff und arbeite dich entsprechend in der Struktur voran. Die XML Implementatoren können schlecht alle möglichen Instanzen für alle möglichen Kombinationen erzeugen.
  Mit Zitat antworten Zitat
Mr.AndersoN

Registriert seit: 31. Dez 2006
3 Beiträge
 
#3

Re: OpenXML: Leeres XML-Element -> Exception

  Alt 16. Jan 2007, 17:47
Mangels aktueller OpenXML Tutorials erschließt sich mir leider nicht, wie man mit selbigen Etappenweise die Struktur eines XML-Dokuments einließt.
Für Hilfe oder hilfreiche Links wäre ich sehr dankbar!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: OpenXML: Leeres XML-Element -> Exception

  Alt 16. Jan 2007, 18:42
Zitat von Mr.AndersoN:
Mangels aktueller OpenXML Tutorials erschließt sich mir leider nicht, wie man mit selbigen Etappenweise die Struktur eines XML-Dokuments einließt.
Ich habe OpenXML noch nie benutzt und auch noch nie in die Dokumentation geschaut (werde ich wohl auch nie, eher erweitere ich meine Lib). Aber trotzdem bin ich mir ziemlich sicher, dass die einzelnen Funktionen Instanzen zurück liefern. Diese können auch nil sein. Du müsstest dich einfach nur (z.B. einfachst ohne Hilfe im Code-Insight Fenster) kundig machen, welchen Typ/Klasse dir geliefert wird. Dann kannst du oben im Var-Abschnitt den Typ ergänzen und folgendes schreiben:

Delphi-Quellcode:
Var
  lTagList: ???; // in Code-Insight sollte stehen, welcher Typ von GetElementsByTagName() liefert - diesen dort eintragen
  lNode: ???; // gleiches bei der Methode Item() von lTagList
...
Begin
  lTagList := Doc.GetElementsByTagName('leeres_xml_element');
  If Assigned(lTagList) And ( lTagList.Count > 0 ) Then
  Begin
    lNode := lTagList.Item(0);
    
    If ( lNode.ChildNodes.Count > 0 ) Then
      ShowMessage(lNode.ChildNodes.Item(0).NodeValue)
    Else
      ShowMessage('keine Unterknoten am Tag "leeres_xml_element" vorhanden!');
  End
  Else
    ShowMessage('kein Element namens "leeres_xml_element" gefunden!');
End;
Beide Fehlermeldungen/Hinweise würden dir Fehler in der Struktur oder dem Pfad des Zugriffs aufzeigen. XML ist aber gerade auch dazu gedacht, unnötige Informationen bei Bedarf wegfallen zu lassen, daher ist es Sache von dir/deinem Code das entsprechend zu handlen. Also benötigte Knoten die fehlen entsprechend anzumeckern und bei optionalen Tags entsprechend ein Defaulthandling ausführen oder einfach ignorieren.
  Mit Zitat antworten Zitat
Mr.AndersoN

Registriert seit: 31. Dez 2006
3 Beiträge
 
#5

Re: OpenXML: Leeres XML-Element -> Exception

  Alt 16. Jan 2007, 19:10
Oh Gott.
Dank dir Muetze1.
Ich hatte wohl gerade unbewusst ignoriert, dass die Länge einer Node-Liste von einem Leeren Element gleich Null ist.
Danke nochmals!
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:00 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