Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Stylesheet in XML Datei einfügen (https://www.delphipraxis.net/118669-stylesheet-xml-datei-einfuegen.html)

LordPsychoter 12. Aug 2008 15:51


Stylesheet in XML Datei einfügen
 
Ich arbeite zurzeit an einem Programm mit welchem ich XML Dateien aufrufen und über eine WebBrowser Komponente anschauen kann.
Ich möchte nun eine XSL Datei als StyleSheet verwenden.

Die XML Dateien sind temporär.
Ich möchte also beim öffnen folgende Zeile in die XML Datei eintragen
"<?xml-stylesheet href="Layout.xsl" type="text/xsl"?>".
(und beim schließen wieder löschen.)

Danach lädt der Browser die Datei und ich sollte halt eine schöne Ansicht mit Layout haben.

Nun liegt mein problem darin das er mir die Zeile für den Stylesheet nicht hinzufügt.

Delphi-Quellcode:
procedure TForm1.AddLine;
var Node : IXMLNode;
    Line : String;
begin
  //add XSL Layout
  Line := '?xml-stylesheet href="Layout.xsl" type="text/xsl"?';
  try
    begin
      Node := XML.CreateNode(Line, ntCData);
      XML.ChildNodes.Add(Node);
    end;
  except
    ShowMessage('Datei kann nicht angezeigt werden');
  end;
end;
So in etwa habe ich mir das gedacht.
Ich denke es liegt an dem Attribut ntCData.

Weiß jemand was da genau rein muss?

lg
LordPsychoter

Edit:
Crosspost: http://forum.delphi-treff.de/showthread.php?t=24436

shmia 12. Aug 2008 17:25

Re: Stylesheet in XML Datei einfügen
 
Tags, die mit <? anfangen sind sogenannte Processing-Instructions.
Bei Benützung von MSXML sähe das so aus:
Delphi-Quellcode:
XML_Doc.appendChild(XML_Doc.createProcessingInstruction('xml-stylesheet', 'href="Layout.xsl" type="text/xsl"?'));

marabu 12. Aug 2008 19:05

Re: Stylesheet in XML Datei einfügen
 
Hallo,

ich habe den Code von Andreas noch ein wenig verhübscht:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
const
  PI_DATA = 'href="layout.xsl" type="text/xsl"';
  PI_TARGET = 'xml-stylesheet';
begin
  with XMLDocument do
  begin
    XML.Text := '<?xml version="1.0"?><root/>';
    Active := True;
    ChildNodes.Insert(
      ChildNodes.IndexOf(DocumentElement),
      CreateNode(PI_TARGET, ntProcessingInstr, PI_DATA)
    );
    ShowMessage(XML.Text);
    Active := False;
  end;
end;
Freundliche Grüße

LordPsychoter 12. Aug 2008 22:09

Re: Stylesheet in XML Datei einfügen
 
Danke ich werde es morgen direkt ausprobieren.
Aber.
wtf?

Woher kennst du meinen Namen?

lg
LordPsychoter

Die Muhkuh 12. Aug 2008 22:11

Re: Stylesheet in XML Datei einfügen
 
Entweder ist es Zufall oder shmia heißt Andreas und marabu bezog sich auf ihn und nicht auf Dich. Jetzt haste Dich verraten. :stupid:

LordPsychoter 13. Aug 2008 08:33

Re: Stylesheet in XML Datei einfügen
 
Ich bekomme nun beim erstellen des Nodes eine Exception

Delphi-Quellcode:
Node := XML.CreateNode(Line, ntProcessingInstr);


Zitat:

... KLasse EOleExceptio. Meldung "Dieser Name das nicht das Zeichen '' enthalten :
xmlstylesheet--><--href="Layout.xsl"type="text/xsl"...
Hier nochmal die aktuelle procedure.

Delphi-Quellcode:

procedure TForm1.AddLine;
var Node : IXMLNode;
    Line : String;
begin
  //add XSL Layout
  Line := 'xml-stylesheet href="Layout.xsl" type="text/xsl"';
  try
    begin
      Node := XML.CreateNode(Line, ntProcessingInstr);
      XML.ChildNodes.Add(Node);
    end;
  except
    ShowMessage('Datei kann nicht angezeigt werden');
  end;
end;
Nun ist die Frage warum.
Ein bisschen weiter unten erstelle ich genau so einen Kommentar ohne das ich dabei probleme habe.

LordPsychoter 13. Aug 2008 08:37

Re: Stylesheet in XML Datei einfügen
 
Okay danke nochmal.

Ich habs

Delphi-Quellcode:

procedure TForm1.AddLine;
var Node : IXMLNode;
    Line : String;
const PI_DATA = 'href="layout.xsl" type="text/xsl"';
      PI_TARGET = 'xml-stylesheet';
begin
  //add XSL Layout
  Line := 'xml-stylesheet href="Layout.xsl" type="text/xsl"';
  try
    begin
      Node := XML.CreateNode(PI_Target, ntProcessingInstr, PI_DATA);
      ShowMessage('fertig');
      XML.ChildNodes.Add(Node);
      XML.SaveToFile(TempPath+Form2.Datei);
      ShowMessage('klappt');
    end;
  except
    ShowMessage('Datei kann nicht angezeigt werden');
  end;
end;
Kann mir auhc jemand erklären warum so?

lg
LordPsychoter

marabu 14. Aug 2008 06:19

Re: Stylesheet in XML Datei einfügen
 
Moin,

Zitat:

Zitat von LordPsychoter
... Kann mir auch jemand erklären warum so? ...

Kommentare sind aus der Sicht des DOM gänzlich unstrukturiert. Eine PI hat laut Dokumentation eine Target- und eine Data-Komponente. Nochmal anders musst du vorgehen, wenn du ein Element erzeugen möchtest. Bei einer PI ist die Attribut-Syntax für die Data-Komponente lediglich eine Konvention, bei einem Element werden Attribute gesondert behandelt.

Freundliche Grüße


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