Einzelnen Beitrag anzeigen

creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#1

XML vs. XSL Processor MSXML

  Alt 19. Jan 2019, 17:20
Also:
Ein Teildatensatz einer XML namens <Abfrage.xml>
Code:
...
<Arbeitnehmer>
  <PersNr>0000210</PersNr>
  <Anrede>Frau</Anrede>
  <Vorname>Annelene</Vorname>
  <Nachname>Frey</Nachname>
  <Strasse>HennebergerStrasse 38</Strasse>
  <Postleitzahl>38512</Postleitzahl>
  <Ort>Son'schied</Ort>
  <Foto>../DAT/JPG/Frau_1.jpg</Foto>
 </Arbeitnehmer>
...
Für die Ausgabe im Browser eine HTML.XSL:
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>
 <body>
  <h2>Personaldaten</h2>
   <xsl:for-each select="Personaldaten/Arbeitnehmer">
    <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>
Beides zusammengebracht mit diesem Code:
Delphi-Quellcode:
    uses MSXML; // Version 6 (Windows 10)
    var
     XMLResult : IXMLDOMDocument;
     XSLTTemplate: IXSLTemplate;
     XSLTStyleSheet: IXMLDOMDocument2;
     XSLProcessor: IXSLProcessor;
    begin
     XMLResult := CoDOMDocument.Create;
     XSLTStyleSheet := CoFreeThreadedDOMDocument.Create;
     XSLTStyleSheet.async := False;
     XSLTStyleSheet.load(XSLPath + 'HTML.xsl');
     XSLTTemplate := CoXSLTemplate.Create;
     XSLTTemplate.stylesheet := XSLTStyleSheet;
     XSLProcessor := XSLTTemplate.createProcessor;
     XSLProcessor.input := XSLPath + 'Abfrag.xml';
     XSLProcessor.transform;
     XMLResult.loadXML(XSLProcessor.output);
     XMLResult.save(HTMPath + 'Ergebnis.html');
    end;
und Feuer frei. Die Ergebnis.html entspricht dem gewünschten Kunstwerk.

Jetzt pappe ich in die XSL noch den Verweis auf das Bild ..(Foto)
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>
 <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 schicke das dann wieder durch den XSL Processor. Das Ergebniss läßt zu wünschen übrig, denn es wird NICHTS ausgegeben. NULL. NIENTE. Die Ergebnis.html ist leer. Der Browser ist sowas von leer. VOLLKOMMEN. Eine Fehlermeldung von Delphi oder dem Browser gibt es auch nicht.

ABER:
Wenn ich jetzt in die Abfrage.xml einen direkten Verweis auf diese XSL mit dem Bildverweis setze ....

Code:

<?xml-stylesheet href="HTML.xsl" type="text/xsl"?>
und die Abfrage.xml in Firefox öffnen habe ich das gewünscht Ausgabeergebnis : Daten mit Bild.
Also zerlegt für mein Verständnis der XSLProcessor meine schöne Arbeit und sagt mit nicht warum der Sack. Hilfreiche Informationen sind nicht zu finden. Bei MS ist nichts zu finden, im Netz alles nur bezogen auf Java Script.

Hat hier jemand eine Idee?

creehawk

Geändert von creehawk (20. Jan 2019 um 06:30 Uhr)
  Mit Zitat antworten Zitat