AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi [MSXML] - Existiert ein Wert?
Thema durchsuchen
Ansicht
Themen-Optionen

[MSXML] - Existiert ein Wert?

Ein Thema von xZise · begonnen am 10. Apr 2007 · letzter Beitrag vom 10. Apr 2007
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

[MSXML] - Existiert ein Wert?

  Alt 10. Apr 2007, 13:43
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?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: [MSXML] - Existiert ein Wert?

  Alt 10. Apr 2007, 13:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: [MSXML] - Existiert ein Wert?

  Alt 10. Apr 2007, 14:05
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 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...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: [MSXML] - Existiert ein Wert?

  Alt 10. Apr 2007, 14:08
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
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: [MSXML] - Existiert ein Wert?

  Alt 10. Apr 2007, 14:10
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: [MSXML] - Existiert ein Wert?

  Alt 10. Apr 2007, 15:59
Delphi-Quellcode:
var
  ElementAuthor, ElementRoot : IXMLDOMElement;
begin
...
// XPath Ausdruck verwenden
ElementAuthor := ElementRoot.selectSingleNode('./author') as IXMLDOMElement;
if assigned(ElementAuthor) then
   ShowMessage(ElementAuthor.Text);
Andreas
  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 00:17 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