Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   XML vs. XSL Processor MSXML (https://www.delphipraxis.net/199383-xml-vs-xsl-processor-msxml.html)

creehawk 19. Jan 2019 16:20

XML vs. XSL Processor MSXML
 
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

Delphi.Narium 19. Jan 2019 16:44

AW: XML vs. XSL Processor MSXML
 
Liegt es am img-Tag?

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


eher so:

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


Siehe: https://wiki.selfhtml.org/wiki/Referenz:HTML/img

Da steht ganz klar:
Zitat:

Zitat von SelfHtml
Start-Tag: notwendig
End-Tag: verboten

Ansonsten: https://www.w3schools.com/tags/tag_img.asp

Tante Google mit html tag img syntax versorgt gibt ausreichend Hilfe.

creehawk 20. Jan 2019 05:33

AW: XML vs. XSL Processor MSXML
 
Moin.

Nein, liegt es nicht. Ob man den TAG jetzt dranlässt wie hier im Beispiel oder eben nicht: es führt zum beschriebenen Ergebnis.

Ich habe das jetzt mal aus dem Code oben rausgenommen. Aber wie gesagt.

creehawk


P.S. Wie gesagt, Firefox und IE (und Edge und Opera) fressen das problemlos.

creehawk 20. Jan 2019 08:26

AW: XML vs. XSL Processor MSXML
 
Ops, falsch.

Die Abfrage.xml mit dem direkten Verweis auf die XSL produziert in Firefox und Opera eine korrektes Ergebnis.

Nicht so in Edge und in der TWebrowser Komponente von Delphi. Das Kernproblem der Grafiken besteht dort auch nicht, allerdings werden die Umlaute nicht korrekt wiedergegeben wie ich leider eben erst entdeckt habe.

Noch mehr Nonsens also.

creehawk

Delphi.Narium 20. Jan 2019 09:49

AW: XML vs. XSL Processor MSXML
 
Zitat:

Zitat von creehawk (Beitrag 1423639)
Ob man den TAG jetzt dranlässt wie hier im Beispiel oder eben nicht: es führt zum beschriebenen Ergebnis.

Man kann syntaktisch korrektes XML und HTML verwenden oder auch nicht.
Man kann sich drauf verlassen, dass der Browser die Fehler schon irgendwie ignorieren oder beheben wird, oder auch nicht.

Mit den Folgen muss man dann halt leben.

creehawk 20. Jan 2019 09:55

AW: XML vs. XSL Processor MSXML
 
Also:

Wenn ich den img TAG so verwende wie vorgeschrieben geht es nicht.
Wenn ich den img TAG mit abschließendem TAG </img> verwende geht es auch nicht.

Und wie bemerkt als Garnitur gibt der EDGE die Umlaute nicht aus.

Und wenn ich die Abfrage.xml aufrufe in Firefox wird alles korrekt gezeigt, wenn ich die Seite dann im Firefox speichere und diese wieder aufrufe sind die Umlaute auch im ..... also nicht korrekt.

Ipso facto : kompletter Mist.

creehawk

Schokohase 20. Jan 2019 11:33

AW: XML vs. XSL Processor MSXML
 
Fehlendes Wissen wird heutzutage gerne durch eine lautstarke Meinung kompensiert und dummerweise bekommen die mit der lautesten Meinung auch noch die meiste Aufmerksamkeit.

Von mir nicht mehr. Wenn du an einem Wissensaustausch interessiert bist, dann immer gerne, aber so, das braucht kein Mensch.

Delphi.Narium 20. Jan 2019 11:48

AW: XML vs. XSL Processor MSXML
 
Zitat:

Zitat von Schokohase (Beitrag 1423649)
Fehlendes Wissen wird heutzutage gerne durch eine lautstarke Meinung kompensiert und dummerweise bekommen die mit der lautesten Meinung auch noch die meiste Aufmerksamkeit.

Leider ist diese Aussage korrekt und allgemeingültig :x

creehawk 20. Jan 2019 17:08

AW: XML vs. XSL Processor MSXML
 
Öh, habe ich jetzt etwas falsches gesagt?

Die geposteten Code/XSL/XML Teile sind doch syntaktisch jetzt richtig oder nicht? Fehlendes Wissen ist in soweit korrekt, als ich eben nicht auf die Reihe bekomme wieso das jetzt nicht geht.



creehawk

Delphi.Narium 20. Jan 2019 17:15

AW: XML vs. XSL Processor MSXML
 
Zitat:

Zitat von creehawk (Beitrag 1423667)
Die geposteten Code/XSL/XML Teile sind doch syntaktisch jetzt richtig oder nicht?

Wäre dem so, würde es funktionieren.

https://wiki.selfhtml.org/wiki/XML/R...und_Kommentare

creehawk 20. Jan 2019 18:07

AW: XML vs. XSL Processor MSXML
 
@delphi.Narium

Aus deiner Antwort entnehme ich das du weißt was nicht stimmt. Das Statement "..würde es funktionieren" deutet jedenfalls daraufhin.

Ich kann jedenfalls keinen Fehler entdecken der den XSL Processor zu diesem Verhalten "inspiriert".

creehawk

Schokohase 20. Jan 2019 18:16

AW: XML vs. XSL Processor MSXML
 
Zitat:

Zitat von creehawk (Beitrag 1423667)
Öh, habe ich jetzt etwas falsches gesagt?

Ja
Zitat:

Zitat von creehawk (Beitrag 1423646)
Und wenn ich die Abfrage.xml aufrufe in Firefox wird alles korrekt gezeigt, wenn ich die Seite dann im Firefox speichere und diese wieder aufrufe sind die Umlaute auch im ..... also nicht korrekt.

Ipso facto : kompletter Mist.

Zitat:

Zitat von creehawk (Beitrag 1423642)
Nicht so in Edge und in der TWebrowser Komponente von Delphi. Das Kernproblem der Grafiken besteht dort auch nicht, allerdings werden die Umlaute nicht korrekt wiedergegeben wie ich leider eben erst entdeckt habe.

Noch mehr Nonsens also.

Wenn Umlaute nicht korrekt angezeigt werden, dann liegt das am Encoding. Das sollte man wissen.

Man kann natürlich auch einfach meinen, das das "Nonsens" oder "kompletter Mist" ist oder einfach fragen warum das so ist und was man dagegen tun kann.

Deine Entscheidung.

creehawk 20. Jan 2019 18:30

AW: XML vs. XSL Processor MSXML
 
Aha.

Ich werde also an meiner Ausdrucksweise feilen.

Was das eigentliche Problem mit den Images und dem Processor angeht habe ich eine Lösung bekommen.

Besten Dank jedenfalls.

creehawk

Schokohase 20. Jan 2019 18:49

AW: XML vs. XSL Processor MSXML
 
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>

creehawk 21. Jan 2019 08:22

AW: XML vs. XSL Processor MSXML
 
Moin.

Vielen und herzlichen Dank für diese Lösung meines Kernproblems. Sollte ich im Thread irgendjemanden unqualifiziert angpflaumt oder beleidigt haben biite ich in aller Form um Entschuldigung.

Die mit von anderer Seite vorgeschlagene Lösung muss ich noch testen, die ist um einiges komplizierter. Mal sehen.

Wenn ich damit durch bin stelle ich das hier vor, so wie bei meinen anderen Nachfragen hier im Forum auch, siehe https://www.delphipraxis.net/198509-...einfangen.html

creehawk

haentschman 21. Jan 2019 08:27

AW: XML vs. XSL Processor MSXML
 
Moin...8-)
XML und Personaldaten im Klartext? Verträgt sich das mit der DSGVO? :wink:

creehawk 21. Jan 2019 08:50

AW: XML vs. XSL Processor MSXML
 
Nochmal Moin!

:-D Nee, verträgt sich wohl eher nicht. Eigentlich brauchen wir die Konstruktion für ein PC Spiel, aber so als Personendaten/Adressdaten lässt sich das leichter verstehen.

Eine Frage noch: Die META Angabe in der HTML.xsl ist der entscheidende Faktor für richtige Umlaut Bearbeitung, richtig?

creehawk

creehawk 21. Jan 2019 09:00

AW: XML vs. XSL Processor MSXML
 
@schokohase:

Tja, und noch eine Frage:

Im HTML Ergbnis stehen jetz ZWEI META Einträge
Code:
        <META http-equiv="Content-Type" content="text/html; charset=UTF-16">
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
Abgesehen davon das ich diese META Kiste nochmal studieren muss: Ist das jetzt richtig? Vermutlich, aber ich dachte bisher entweder ist das Ergebnis entweder UTF-16 oder eben UTF-8.

creehawk

Schokohase 21. Jan 2019 09:13

AW: XML vs. XSL Processor MSXML
 
Ja, das ist noch eine Merkwürdigkeit von der Delphi-MSXML Konstruktion, denn die trägt einfach die UTF-16 Zeile ein, alle anderen Lösungen (via Browser, via C#) machen das nicht, und die benötigen deshalb dringend die META ... UTF-8 Zeile im Stylesheet, sonst gibt es wieder das Encoding-Problem.

Da aber der letzte Eintrag Vorrang hat ist es mehr Kosmetik (unschön) als wirklich ein Problem.


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