Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML-Header/XSL-Referenz mittels MSXML erzeugen (https://www.delphipraxis.net/110382-xml-header-xsl-referenz-mittels-msxml-erzeugen.html)

MatthiasR 17. Mär 2008 12:08


XML-Header/XSL-Referenz mittels MSXML erzeugen
 
Ich arbeite mit MSXML und erzeuge mit dessen Funktionalität meine eigenen XML-Dokumente. Das klappt auch schön und gut, was ich bisher aber noch nicht hinbekommen habe, ist

1. einen gültigen XML-Header samt xml-Version und encoding-Attribut zu erzeugen und
2. darauffolgend eine XSL-Stylesheet-Referenz einzufügen.

Mein Codebeispiel:

Delphi-Quellcode:
procedure CreateXMLFile(FileName: string);
var
  i: Integer;
  XMLDoc: IXMLDOMDocument2;
  aLine: IXMLDOMElement;
  aElement: IXMLDOMElement;
begin
  XMLDoc := CoDOMDocument40.Create;
  try
    XMLDoc.setProperty('NewParser', True);
    XMLDoc.setProperty('SelectionLanguage', 'XPath');
    XMLDoc.validateOnParse := False;

    // Wurzelknoten erzeugen
    XMLDoc.appendChild(XMLDoc.createElement('tabelle'));

    for i := 1 to (Grid.RowCount - 1) do
    begin
      aLine := XMLDoc.createElement('line');
      XMLDoc.documentElement.appendChild(aLine);

      // Spalte 1
      aElement := XMLDoc.createElement('spalte1');
      aLine.appendChild(aElement);
      aElement.text := Grid.Cells[1, i];

      // Spalte 2
      aElement := XMLDoc.createElement('spalte2');
      aLine.appendChild(aElement);
      aElement.text := Grid.Cells[2, i];

      // Spalte 3
      aElement := XMLDoc.createElement('spalte3');
      aLine.appendChild(aElement);
      aElement.text := Grid.Cells[3, i];
    end;

    XMLDoc.save(FileName);
  finally
    XMLDoc := nil;
  end;
end;
erzeugt folgendes XML-Dokument:
Delphi-Quellcode:
<tabelle>
   <line>
      <spalte1>1</spalte1>
      <spalte2>2</spalte2>
      <spalte3>3</spalte3>
   </line>
   <line>
      <spalte1>1</spalte1>
      <spalte2>2</spalte2>
      <spalte3>3</spalte3>
   </line>
   <line>
      <spalte1>1</spalte1>
      <spalte2>2</spalte2>
      <spalte3>3</spalte3>
   </line>
</tabelle>
Es soll aber so aussehen:
Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Stylesheet.xsl">
<tabelle>
   <line>
      <spalte1>1</spalte1>
      <spalte2>2</spalte2>
      <spalte3>3</spalte3>
   </line>
   <line>
      <spalte1>1</spalte1>
      <spalte2>2</spalte2>
      <spalte3>3</spalte3>
   </line>
   <line>
      <spalte1>1</spalte1>
      <spalte2>2</spalte2>
      <spalte3>3</spalte3>
   </line>
</tabelle>
Wie kriege ich das mit MSXML-Bordmitteln hin?

shmia 12. Jun 2008 16:09

Re: XML-Header/XSL-Referenz mittels MSXML erzeugen
 
Mit createProcessingInstruction() erzeugt man die Knoten <? ..... ?>
Delphi-Quellcode:
XMLDoc := CoDOMDocument40.Create;
XMLDoc.appendChild(Result.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'));


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