AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi [OpenXML] Wie kann ich eine DTD einbinden?
Thema durchsuchen
Ansicht
Themen-Optionen

[OpenXML] Wie kann ich eine DTD einbinden?

Offene Frage von "Bernd63"
Ein Thema von Bernd63 · begonnen am 15. Mai 2007 · letzter Beitrag vom 15. Mai 2007
Antwort Antwort
Bernd63

Registriert seit: 14. Mai 2007
3 Beiträge
 
#1

[OpenXML] Wie kann ich eine DTD einbinden?

  Alt 15. Mai 2007, 21:21
Hallo,

mein erstes XML-Projekt macht mir sorgen . Ich habe mich für OpenXML 3.2 entschieden, da ich keine MS Abhängigkeiten mag. Leider habe ich nur das mitgelieferte manual.xml als Doku. Die Tutorials auf http://www.philo.de/xml/ sind hoffnungslos veraltet.

Ich möchte ein mit den Open Source Grafikprogramm Inkscape erzeugte SVG-Datei einlesen. Die darin enthaltenen 'rect'-Tags mit meinen Programm manipulieren und danach wieder abspeichern. Die 'rect'-Tags ermittle ich mit GetElementsByTagName und hole mir die ID's nach RList vom Typ TStringList. Soweit so gut. Nun möchte ich mit GetElementById mir ein rect per id holen. Die Funktion liefert aber immer nil. Habe bereits herausgefunden das es daran liegt, dass keine DTD vorhanden ist. Doch wie bekomme ich die in den ValidationAgent rein? Kann mich mal einer von euch Profis mit der Nase drauf stupsen?

Code:
var
  SVGDoc: TDOMDocument;
  List: TDomNodeList;
  AttribNode: TDomNode;
  Element : TDomElement;
  i: Integer;
  RList: TStringList;
begin
  SVGDoc := XmlToDomParser1.FileToDom(SVGFileName);
  SVGDoc.ValidationAgent.ValidateDocument(erExpand);
  RList := SVGDoc.DocumentElement.GetElementsByTagName('rect');

  ...
  Element := SvgDoc.GetElementById(RList[i]);

end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: [OpenXML] Wie kann ich eine DTD einbinden?

  Alt 15. Mai 2007, 22:04
Herzlich willkommen in der Delphi-PRAXiS, Bernd63.

Eine DTD erlaubt zwar eine Validierung des XML-Dokumentes, hat aber keinerlei Auswirkungen auf deine Zugriffsmöglichkeiten über das Document Object Model. Ich fürchte, du musst deinen Fehler an einer anderen Stelle suchen. Vermutlich wendest du die Methode GetElementsByID() nicht korrekt an.

Gute Nacht
  Mit Zitat antworten Zitat
Bernd63

Registriert seit: 14. Mai 2007
3 Beiträge
 
#3

Re: [OpenXML] Wie kann ich eine DTD einbinden?

  Alt 15. Mai 2007, 23:56
Hallo Marabu,
danke für die nette Begrüßung. Habe mir gerade ein Bier geholt und schon sehe ich, das ich Antwort habe. Fühle ich mich gleich besser, war nämlich vorher ziemlich am fluchen.

Also ich habe wirklich nicht so viel Ahnung von XML. Aber ich denke da wie Alf (der vom Planeten Melmac) - Etwas nicht zu können ist noch lange kein Grund es nicht zu tun!

Ich habe den Debugger gefragt und der sagt das GetElementById ValidationAgent.IDs.Find aufruft und da ist FCount=0. Hab ich in der Doku zu GetElementById nachgelesen und da steht sinngemäß: Wenn du OpenXML nicht mit einer DTD sagst, dass das Attribut 'id' ein eindeutiger Index über alle Elemente ist, dann wirst du mit einen NIL-Zeiger als Funktionsergebnis vorlieb nehmen müssen. Habe ich gedacht: Ach so, wenn OpenXML die Datei validiert und dabei sowieso alle Elemente anfasst, dass ist es so schlau gleich mal alle ID's einzusammeln. Aber nur wenn ich vorher mit eine DTD Bescheid sage. Gegenthese?

Ich finde es cool, das der Autor von OpenXML – Dieter Köhler – nicht etwa Informatik studiert hat, sondern Philosophie und Theologie. Habe mir gerade seine HP angeschaut und bin nun wiedermal voll begeistert von Philosophie. Zum Beispiel die aktuelle Umfrage:

Finden Sie, daß 5 Jahre für ein Magisterstudium der Philosophie genug sind?

Eindeutig NEIN! Ist doch klar und logisch: Wer es in mühevoller Kleinarbeit geschafft hat, sich den Sinn des Lebens und sonstiger dringlichster Fragestellungen in durchzechten Nächten und den darauf folgenden Nachmittagen auf philosophischer Weise zu nähern, dessen Erkenntnisprozess darf man nicht einfach nach 5 Jahren abrupt abbrechen. Denn die dann nötige werdende Jagt nach dem schnöden Mammon würde uns um die Früchte seiner Erkenntnis bringen. Und überhaupt sollte ein Magister der Philosophie alt und weise sein und nicht etwa 27 und besserwisserisch. Unter 19 Semester geht da garnichts!


So mein Bier habe ich alle genuggelt und nun verspüre ich das dringende Bedürfnis... , ja das auch, aber vor allen das Bedürfnis mit meinem Kopfkissen zu kuscheln.

Man liest sich!
Bernd (nicht das Brot, aber ein Leidensgenosse von ihn)

P.S.: Wie ist das nun mit der DTD? Wäre es nicht gut erstmal eine reinzustecken und dann gucken was bei GetElementById rauskommt? Die Praxis ist das Kriterium der Wahrheit! Man bin ich gut drauf...
  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 16:43 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