Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Fehlermeldung beim Erstellen einen neuen XML-Dokument (https://www.delphipraxis.net/43188-fehlermeldung-beim-erstellen-einen-neuen-xml-dokument.html)

tobu 30. Mär 2005 13:07


Fehlermeldung beim Erstellen einen neuen XML-Dokument
 
Ich habe folgenden Code für das Erzeugen eines neuen XMl-Dokumentes:
Delphi-Quellcode:
procedure TForm1.Neu1Click(Sender: TObject);
var
  NewXMLDoc : IXMLDocument;
  Prolog : TStrings;
begin
  NewXMLDoc := TXMLDocument.Create(self);
  Prolog := TStringList.Create;

  Prolog.Insert(0,'<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>');
  Prolog.Insert(1,'<?xml-stylesheet href="style.xsl" type="text/xsl"?>');
  Prolog.Insert(2,'<!DOCTYPE SQLDatei [');
  Prolog.Insert(3, '');
  Prolog.Insert(4, #9 + '<!ELEMENT SQLDatei (Script+)>');
  Prolog.Insert(5, #9 + '');
  Prolog.Insert(6, #9 + '<!ELEMENT Script (Beschreibung,Befehl)>');
  Prolog.Insert(7, #9 + '<!ELEMENT Beschreibung (#PCDATA)>');
  Prolog.Insert(8, #9 + '<!ELEMENT Befehl (#PCDATA)>');
  Prolog.Insert(9, #9 + '<!ATTLIST Script');
  Prolog.Insert(10, #9 + #9 + 'DB-Typ (SQL-Sever | Oracle)   #REQUIRED');
  Prolog.Insert(11, #9 + #9 + 'Nummer   CDATA   #REQUIRED');
  Prolog.Insert(12, #9 + #9 +  'Author   CDATA   #REQUIRED');
  Prolog.Insert(13, #9 + '>');
  Prolog.Insert(14, #9 + ']>');
  Prolog.Insert(15,'<SQLDatei>');
  Prolog.Insert(16, #9 + '<Script DB-Typ="SQL-Server" Nummer="1" Author="CD">');
  Prolog.Insert(17, #9 + #9 + '<Beschreibung>Neue Beschreibung eintragen</Beschreibung>');
  Prolog.Insert(18, #9 + #9 + '<Befehl>Neues SQL-Script eintragen</Befehl>');
  Prolog.Insert(19, #9 + '</Script>' );
  Prolog.Insert(20, '</SQLDatei>');

  NewXMLDoc.XML := Prolog;
  NewXMLDoc.Active := true;

  SaveDialog1.Filter := 'XML-Document (*.xml)|*.XML';

  if SaveDialog1.Execute then
    NewXMLDoc.FileName := SaveDialog1.FileName;

  NewXMLDoc.SaveToFile(NewXMLDoc.FileName + '.xml');

  XMLDoc.FileName := NewXMLDoc.FileName;
  XMLDoc.Active := true;
  Lesen(0);
end;
Leider bekomme ich immer an der Stelle XMLDoc.Active := true die folgende Fehlermeldung:

Im Projekt ist eine Exception der Klasse EDOMParseError aufgetreten. Meldung:'System error: -2146697210.
Linie:0
'. Prosess wurde angehalten.

Die Funktion Lesen liest den Knoten mit Index 0 des XML-Dokumentes.
Das XML-Dokument wurde aber erstellt und ich kann mir es anzeigen lassen ohne das Fehlermeldungen auftreten. Hat von euch vieleicht jemand eine Idee?

Michael_Bayer 30. Mär 2005 13:10

Re: Fehlermeldung beim Erstellen einen neuen XML-Dokument
 
Ich würde sagen die Lesen ist kaputt :wink:

tobu 30. Mär 2005 13:12

Re: Fehlermeldung beim Erstellen einen neuen XML-Dokument
 
Klasse Kommentar, danke für die wirklich brauchbare Hilfe. :thumb:

jim_raynor 30. Mär 2005 14:52

Re: Fehlermeldung beim Erstellen einen neuen XML-Dokument
 
1. Was ist XMLDoc?
2. Muss bei XMLDoc nicht noch ein LoadFromFile rein?
3. Warum arbeitest du nicht direkt mit XMLDoc?

sakura 30. Mär 2005 15:02

Re: Fehlermeldung beim Erstellen einen neuen XML-Dokument
 
Uns fehlen generell die refenzierten Dateien, wie z.B. das StyleSheet, um es testen zu können. Aber einen Tipp habe ich, nutze anstatt Insert(X, ''); lieber einfach ein Add('');, das ist schneller und flexibler :cyclops:

...:cat:...

tobu 31. Mär 2005 08:27

Re: Fehlermeldung beim Erstellen einen neuen XML-Dokument
 
@ jim_raynor: XMLDoc ist die TXMLDocument Komponente von Form1, die kann ich nicht benutzten, denn es könnte ja sein dort schon eine andere XML-Datei drin steht.
@ sakura: Ich habe jetzt das Add benutzt, ich hab gedacht das würde nur geht wenn schon was in der StringList steht. Funktioniert aber wunderbar.

@ all: Danke für die Tipps, ich habe den Fehler gefunden.

Der Fehler war in der Zuweisung des Filename es muss heißen:
Delphi-Quellcode:
//Speichern des neuen XML-Dokument
  SaveDialog1.Filter := 'XML-Document (*.xml)|*.XML';

  if SaveDialog1.Execute then
    NewXMLDoc.FileName := SaveDialog1.FileName + '.xml';

  NewXMLDoc.SaveToFile(NewXMLDoc.FileName);

  XMLDoc.FileName := NewXMLDoc.FileName;
  XMLDoc.Active := true;
Jetzt läuft es ohne Probleme. :)


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