AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi MSXML DTD in XML Datei einfügen

MSXML DTD in XML Datei einfügen

Ein Thema von jacobi1880 · begonnen am 3. Jun 2008 · letzter Beitrag vom 5. Jun 2008
Antwort Antwort
jacobi1880

Registriert seit: 3. Jun 2008
4 Beiträge
 
Delphi XE2 Enterprise
 
#1

MSXML DTD in XML Datei einfügen

  Alt 3. Jun 2008, 15:49
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:
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;
wenn ich die Funktion AddNode mit 'ntDocType' zum einfügegn der DTD nutze gibt es
keine Fehlermeldung, die Zeile wird aber in XML-Datei nicht angezeigt.


MfG

jacobi1880
  Mit Zitat antworten Zitat
shmia

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

Re: MSXML DTD in XML Datei einfügen

  Alt 3. Jun 2008, 17:47
Ich kenne auch nur folgende nicht sehr schöne Lösung:
Delphi-Quellcode:
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);
Das Wurzelelement muss oben schon mitgeladen werden, sonst wäre es kein gültiges XML-Dokument.
Die Zeilenumbrüche mit #13#10 kann man auch weglassen.
Andreas
  Mit Zitat antworten Zitat
marabu

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

Re: MSXML DTD in XML Datei einfügen

  Alt 3. Jun 2008, 18:21
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
  Mit Zitat antworten Zitat
jacobi1880

Registriert seit: 3. Jun 2008
4 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: MSXML DTD in XML Datei einfügen

  Alt 4. Jun 2008, 09:57
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:
Ein DOCTYPE-Knoten muss also bereits an den DOM-Parser übergeben werden - ob das nun schön oder unschön ist.
Ich arbeite mit folgenden Units: 'XMLDoc, XMLIntf, MSXMLDom'.
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?

Für ein Tipp wäre ich sehr dankbar.

MfG

jacobi1880
  Mit Zitat antworten Zitat
marabu

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

Re: MSXML DTD in XML Datei einfügen

  Alt 4. Jun 2008, 19:54
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
  Mit Zitat antworten Zitat
jacobi1880

Registriert seit: 3. Jun 2008
4 Beiträge
 
Delphi XE2 Enterprise
 
#6

Re: MSXML DTD in XML Datei einfügen

  Alt 5. Jun 2008, 08:32
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
  Mit Zitat antworten Zitat
marabu

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

Re: MSXML DTD in XML Datei einfügen

  Alt 5. Jun 2008, 08:50
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
  Mit Zitat antworten Zitat
jacobi1880

Registriert seit: 3. Jun 2008
4 Beiträge
 
Delphi XE2 Enterprise
 
#8

Re: MSXML DTD in XML Datei einfügen

  Alt 5. Jun 2008, 10:01
Hai,

alles klar und vielen Dank für Unterstutzung.

MFG

jacobi1880
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf