Einzelnen Beitrag anzeigen

Schokohase
(Gast)

n/a Beiträge
 
#14

AW: XML vs. XSL Processor MSXML

  Alt 20. Jan 2019, 19:49
Damit zukünftige Leser hier nicht mit leeren Händen wieder gehen müssen, hier eine Lösung
Delphi-Quellcode:
uses
  Winapi.msxml,
  Winapi.ActiveX,
  System.SysUtils,
  System.IOUtils;

var
  xmlDoc, xslStyle: IXMLDOMDocument;
  html: string;
begin
  xmlDoc := CoDOMDocument.Create;
  xmlDoc.Load(XmlFile);
  xslStyle := CoDOMDocument.Create;
  xslStyle.Load(TransFile);
  html := xmlDoc.TransformNode(xslStyle);
  TFile.WriteAllText(OutFile, html);
end;
Verwendet habe ich dabei als XmlFile
XML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="html.xsl" type="text/xsl"?>
<Personaldaten>
    <Arbeitnehmer>
        <PersNr>0000210</PersNr>
        <Anrede>Frau</Anrede>
        <Vorname>Annelene</Vorname>
        <Nachname>Freyär</Nachname>
        <Strasse>HennebergerStrasse 38</Strasse>
        <Postleitzahl>38512</Postleitzahl>
        <Ort>Son'schied</Ort>
        <Foto>../DAT/JPG/Frau_1.jpg</Foto>
    </Arbeitnehmer>
</Personaldaten>
und als Stylesheet (html.xsl)
XML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <html>
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      </head>
      <body>
        <h2>Personaldaten</h2>
        <xsl:for-each select="Personaldaten/Arbeitnehmer">

          <xsl:variable name="Bild">
            <xsl:value-of select="Foto"/>
          </xsl:variable>

          <img src="{$Bild}" style="border: 1px solid white" alt="Personalbild" align="left"/>

          <p>
            <xsl:value-of select="PersNr"/>
          </p>
          <p>
            <xsl:value-of select="Anrede"/>
          </p>
          <p>
            <xsl:value-of select="concat(Vorname,' ',Nachname)"/>
          </p>
          <p>
            <xsl:value-of select="Strasse"/>
          </p>
          <p>
            <xsl:value-of select="concat(Postleitzahl,' ',Ort)"/>
          </p>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
und erhalte
HTML-Code:
<html>
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=UTF-16">
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h2>Personaldaten</h2>
        <img src="../DAT/JPG/Frau_1.jpg" style="border: 1px solid white" alt="Personalbild" align="left">
        <p>0000210</p>
        <p>Frau</p>
        <p>Annelene Freyär</p>
        <p>HennebergerStrasse 38</p>
        <p>38512 Son'schied</p>
</body>
</html>
  Mit Zitat antworten Zitat