![]() |
MSXML DTD in XML Datei einfügen
Hallo zusammen,
bin neue in diesen Forum und habe gleich eine Frage. Wie kann ich DTD-Zeile in eine neu erstellte XML-Datei einfügen? Ich arbeite mit RAD Studio 2007 und MSXML. Meine XML-Dateien habe ich bereits erstellt, mir fehlt noch DTD. Ich habe viele Beiträge in diesen Forum gelesen und viele nutzlilche Tipps gefunden und benutzt. In google habe ich auch gesucht, aber ich komme nicht weiter und hoffe, dass Ihr mir helfen könnt. So erstelle ich meine XML-Datei:
Delphi-Quellcode:
wenn ich die Funktion AddNode mit 'ntDocType' zum einfügegn der DTD nutze gibt es
var
rootnode : XMLIntf.IXmlNode; ChildNode : XMLIntf.IXmlNode; begin xmlLDoc := XMLDoc.TXmlDocument.Create(nil); xmlDoc.ParseOptions := []; xmlDoc.Active := true; xmlDoc.Version := '1.0'; xmlDoc.Encoding := 'iso-8859-1'; xmlDoc.NodeIndentStr := ' '; xmlDoc.Options := [doNodeAutoIndent]; try rootnode := FXMLDoc.CreateElement('TT', ''); xmlDoc.DocumentElement := rootnode; ChildNode := AddNode(xmlDoc, rootnode, ntElement, 'version', ''); ChildNode.Attributes['number'] := '10'; usw. ------------------------------------------------- function TXMLData.AddNode(aXMLDoc: XMLDoc.TXMLDocument; aParent: XMLIntf.IXmlNode; NodeType: XMLIntf.TNodeType; sNodename, sNodeText: String): XMLIntf.IXmlNode; begin Result := xmlDoc.CreateNode(sNodename, NodeType); if Trim(sNodeText) <> '' then begin case NodeType of ntElement: Result.Text := sNodeText; ntDocType: Result.Text := sNodeText; end; end; if aParent <> nil then aParent.ChildNodes.Add(Result) else xmlDoc.ChildNodes.Add(Result); end; keine Fehlermeldung, die Zeile wird aber in XML-Datei nicht angezeigt. MfG jacobi1880 |
Re: MSXML DTD in XML Datei einfügen
Ich kenne auch nur folgende nicht sehr schöne Lösung:
Delphi-Quellcode:
Das Wurzelelement muss oben schon mitgeladen werden, sonst wäre es kein gültiges XML-Dokument.
document.loadXML('<?xml version="1.0" encoding="UTF-8" standalone="no"?>'#13#10+
'<!DOCTYPE RootElement SYSTEM "BLA_BLA_XML.DTD">'#13#10+ '<RootElement/>'#13#10); Die Zeilenumbrüche mit #13#10 kann man auch weglassen. |
Re: MSXML DTD in XML Datei einfügen
Herzlich willkommen in der Delphi-PRAXiS, jacobi1880.
andere XML DOM Lieferanten mögen das tun, aber MSXML lässt nicht zu, dass CreateNode() für den Knotentyp NODE_DOCUMENT_TYPE aufgerufen wird. MS Windows Platform SDK ... You cannot create a node of type NODE_DOCUMENT, NODE_DOCUMENT_TYPE, NODE_ENTITY, or NODE_NOTATION. ... Ein DOCTYPE-Knoten muss also bereits an den DOM-Parser übergeben werden - ob das nun schön oder unschön ist. Freundliche Grüße |
Re: MSXML DTD in XML Datei einfügen
Vielen Dank für Eure Antworten,
unsaubere Methode ist mir bekannt, aber ich würde sehr gerne wissen wie ich das mit 'saubere Methode' machen könnte. Zitat:
Habe noch einmal versucht aber es klappt nicht, wenn ich das nicht mit CreateNode() machen kann, wie füge ich den DOCTYPE-Knoten in meine XML-Datei? :wall: Für ein Tipp wäre ich sehr dankbar. MfG jacobi1880 |
Re: MSXML DTD in XML Datei einfügen
Hallo,
die von Andreas in Beitrag #2 gezeigte Lösung ist nicht unsauber: Solange du mit MSXML als DOM Vendor arbeitest, hast du keine andere Möglichkeit. Unter uns Ordensschwestern: Warum willst du die DTD unbedingt nachträglich an ein Dokument dranfummeln? Freundliche Grüße |
Re: MSXML DTD in XML Datei einfügen
Hai,
meine XML-Dateien werden per FTP auf ein Server hochgeladen und dort werden sie von einem Parser validiert. Die DTD-Zeile verweist auf eine externe DTD-Datei und muss in jeder XML-Datei vorhanden sein. Dem zu folgen habe ich drei Möglichkeiten dieses Problem zu lösen. 1. Die XML-Datein werden als Templates in einer Datenbank gespeichert, diese Templates beinhalten den DTD-Verweis. Die Dateien werden aus der Datenbank geladen, validiert und mit Werten befühlt. Diese Lösung ist bereits fertig. 2. Die XML-Dateien werden direkt im Quelltext erstellt und und mit Werten befült und diese Lösung ist auch so weit fertig, wäre nicht das Problem mit dem DTD-Verweis, abgesehen von 'unsauberen Lösung'. 3. Unter uns Ordenschwestern könnte ich das Ganze mit StringListen lösen, aber das ist keine XML-Verarbeitung und das mache ich nicht, den wozu hat man einen XML-Parser. Ich hoffe, dass ich deine Frage beantworten konnte. PS: Ich habe das Gefühl, ich bin eine der wenigen, der Fragen zur DTD stellt, den in useren Forum gibt es nur wenige Frage zu diesen Thema. MfG jacobi1880 |
Re: MSXML DTD in XML Datei einfügen
Moin,
externe Templates sind schon der richtige Weg. Ob es bei dir eine Datenbank zu deren Verwaltung sein muss, kann ich nicht beurteilen. Mir würde das FileSystem genügen. Die wenigen Fragen zu XML-DTD's dürften damit zusammenhängen, dass dieses SGML-Feature eine Übergangslösung darstellte und für MSXML sofort durch XML-Data (XDR), für den Rest der Welt später durch XML Schema (XSD), abgelöst wurde. Du wirst gute Gründe dafür haben, dass du keine reine XML-Lösung verwendest. Freundliche Grüße |
Re: MSXML DTD in XML Datei einfügen
Hai,
alles klar und vielen Dank für Unterstutzung. MFG jacobi1880 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz