Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi [MSXML] - Existiert ein Wert? (https://www.delphipraxis.net/90009-%5Bmsxml%5D-existiert-ein-wert.html)

xZise 10. Apr 2007 12:43


[MSXML] - Existiert ein Wert?
 
Wie kann ich überprüfen, ob bestimmte werte gesetzt wurden... Ansonsten gibt es nämlich immer unschöne Exceptions!
Beispiel:
Zitat:

<author>...</author>
<bookname>...</bookname>
Wenn jetzt "bookname" oder "author" optional wären... Wie könnte ich dann testen welches existiert?

MathiasSimmack 10. Apr 2007 12:58

Re: [MSXML] - Existiert ein Wert?
 
Mit einem passenden Schema und einer Validierung. Stimmt dann mit der XML-Datei bzw. mit dem XML-Code etwas nicht, meckert der Parser von sich aus unter Angabe des Fehlers und der Zeilennummer. ;)

Abgesehen davon bliebe nur ein "selectSingleNode"-Test, bei dem du das Ergebnis auf null/nil prüfst.

xZise 10. Apr 2007 13:05

Re: [MSXML] - Existiert ein Wert?
 
Zitat:

Zitat von MathiasSimmack
Mit einem passenden Schema und einer Validierung. Stimmt dann mit der XML-Datei bzw. mit dem XML-Code etwas nicht, meckert der Parser von sich aus unter Angabe des Fehlers und der Zeilennummer. ;)

Das heißt?

Zitat:

Zitat von MathiasSimmack
Abgesehen davon bliebe nur ein "selectSingleNode"-Test, bei dem du das Ergebnis auf null/nil prüfst.

Hmmm... Stimmt so könnte man es machen...

CalganX 10. Apr 2007 13:08

Re: [MSXML] - Existiert ein Wert?
 
Hi,
Mathias meint, du sollst ein XLST bzw. DTD (keine Ahnung, was von beiden jetzt genau das Richtige ist) anlegen und in deiner XML-Datei angeben. Wenn nun eine Node nicht existieren sollte, dann wird der Parser beim Laden der Datei meckern, weil die Datei nicht dem Schema aus der XLST-Definition entspricht.

Chris

MathiasSimmack 10. Apr 2007 13:10

Re: [MSXML] - Existiert ein Wert?
 
Zitat:

Zitat von xZise
Das heißt?

Dass das Schema den Aufbau der XML-Datei kennt. Erforderliche Knoten, die nicht vorhanden sind, können auf die Weise schon entdeckt und als fehlend bemängelt werden. Optionale Knoten findet man so natürlich nicht, aber dafür gibt es den schon erwähnten Schnelltest, indem man den gesuchten Knoten versuchsweise ausliest und prüft, ob er überhaupt existiert (node <> nil).

Hier darf ich mal lobend den XmlSerializer aus dem .NET Framework erwähnen. Auf der Grundlage von entsprechenden Attributen kann man seine Klassen als XML-Datei speichern lassen, wobei sich bestimmte Eigenschaften als optional deklarieren lassen, die (wenn der Standardwert aktiv ist) dann auch gar nicht in der Datei auftauchen. Umgekehrt liest der XmlSerializer die XML-Datei wieder ein und erzeugt daraus die notwendigen Klassen zur Weiterverarbeitung im Programm. Gutes Anwendungsbeispiel: Adressmanager, DVD-"Datenbank" u.ä. Natürlich kann man die XML-Datei vor dem Bearbeiten auch erst mal per Schema validieren lassen, um Fehlermeldungen abzufangen.


Ansonsten Suchfunktion: Hier im Forum suchenXML XSD Schema

shmia 10. Apr 2007 14:59

Re: [MSXML] - Existiert ein Wert?
 
Delphi-Quellcode:
var
  ElementAuthor, ElementRoot : IXMLDOMElement;
begin
...
// XPath Ausdruck verwenden
ElementAuthor := ElementRoot.selectSingleNode('./author') as IXMLDOMElement;
if assigned(ElementAuthor) then
   ShowMessage(ElementAuthor.Text);


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 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