Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Stylesheet für XML Datei (https://www.delphipraxis.net/67236-stylesheet-fuer-xml-datei.html)

Luckie 11. Apr 2006 15:39


Stylesheet für XML Datei
 
Wie müsste ein Stylesheet oder wie das heißt aussehen, damit eine solche XML-Datei:
XML-Code:
- <importkennungen>
- <zeitraum jahr="2007">
  <ziel kennung="11A13">(#BUNG07)\Lieferschein</ziel>
  <ziel kennung="11A15">(#BUNG07)\Rechnung</ziel>
  <ziel kennung="11A11">(#BUNG07)\Firma2\Lieferschein</ziel>
  </zeitraum>
- <zeitraum jahr="2006">
  <ziel kennung="11A13">(#BUNG06)\Lieferschein</ziel>
  <ziel kennung="11A15">(#BUNG06)\Rechnung</ziel>
  <ziel kennung="11A11">(#BUNG06)\Firma2\Lieferschein</ziel>
  </zeitraum>
- <zeitraum jahr="2005">
  <ziel kennung="11A13">(#BUNG05)\Lieferschein</ziel>
  <ziel kennung="11A15">(#BUNG05)\Rechnung</ziel>
  <ziel kennung="11A11">(#BUNG05)\Firma2\Lieferschein</ziel>
  </zeitraum>
- <zeitraum jahr="2004">
  <ziel kennung="11A13">(#BUNG04)\Lieferschein</ziel>
  <ziel kennung="11A15">(#BUNG04)\Rechnung</ziel>
  <ziel kennung="11A11">(#BUNG04)\Firma2\Lieferschein</ziel>
  </zeitraum>
  </importkennungen>
im Browser gescheit aussieht?

Chewie 11. Apr 2006 15:52

Re: Stylesheet für XML Datei
 
Welches Stylesheet?
CSS kann auch auf XML-Elemente angewandt werden, wenn die Struktur der Datei in etwa der Struktur der Anzeige entsprechen soll, tuts eine einfache CSS-Datei. ich hab das noch nicht selbst ausprobiert, aber im Prinzip kannst du ja per CSS das Aussehen sehr frei festlegen, also Borders, Margins, Paddings und ob es ein Block- oder Inline-Element ist.

Wenn dir das nicht reicht, bleibt noch XSLT übrig, damit bist du, was das Ausgabeformat betrifft, quasi unbeschränkt.

MathiasSimmack 11. Apr 2006 20:08

Re: Stylesheet für XML Datei
 
Dachtest du an so was?
XML-Code:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="importkennungen">
  <html>
  <head>
     <title>Importkennungen</title>
  </head>
  <body>
     <xsl:apply-templates />
  </body>
  </html>
</xsl:template>

<xsl:template match="zeitraum">
   <table>
      <tr><th><xsl:value-of select="@jahr"/></th></tr>
      <xsl:apply-templates/>
   </table>      
</xsl:template>

<xsl:template match="ziel">
   <tr><td><xsl:value-of select="@kennung"/>, <xsl:apply-templates/></td></tr>
</xsl:template>

</xsl:stylesheet>
Lässt sich, wie Chewie schon sagte, noch mit CSS und Co. verschönern. Aber du musst der XML-Datei auch sagen, dass sie ein XSL-Stylesheet hat:
XML-Code:
<?xml-stylesheet href="importkennungen.xsl" type="text/xsl"?>
<importkennungen>
 
</importkennungen>

Luckie 11. Apr 2006 22:13

Re: Stylesheet für XML Datei
 
Ja genau so was. Spitze. :thumb:

Könnte mir nochjemand das Prinzip an Hand obigen Beispieles erklären?

Noch eine frage, warum sagt er mir das ein "ü" ein ungültiges Zeichen wäre? :gruebel:
Habs: <?xml version="1.0" encoding="ISO-8859-1"?> muss es heißen, dann gehen auch Umlaute. ;)

MathiasSimmack 12. Apr 2006 16:35

Re: Stylesheet für XML Datei
 
Zitat:

Zitat von Luckie
Könnte mir nochjemand das Prinzip an Hand obigen Beispieles erklären?

Das ergibt sich eigentlich anhand des XML-Codes. Du musst quasi für jeden Knoten ein Template schreiben und dort den gewünschten HTML-Code unterbringen.

XML-Code:
<xsl:value-of select="?"/>
<xsl:apply-templates />
sind dabei eigentlich spezielle XML-"Befehle", durch die quasi der restliche Code bearbeitet wird. Würdest du das beim <importkennungen>-Template nicht angeben, dann hättest du nur eine leere HTML-Seite ohne Inhalt. Daneben gibt es noch weitere Befehle (u.a. auch eine for-Schleife), mit denen du das Ergebnis noch weiter beeinflussen kannst. Aber die Erklärung würde letztlich zu lange dauern. Da du das PSDK hast, verweise ich dich einfach mal auf die passenden Befehle, die ja dort erläutert werden.

Hier mal ein kleines Beispiel, falls du typische HTML-Befehle in XML-Dateien verwenden willst und diese auch 1:1 umsetzen möchtest. Wie gesagt, XML an sich kann mit <a>, <pre> und Co. ja nichts anfangen. Aber du brauchst nun nicht jedes HTML-Tag bekannt machen, es reicht auch eine Aufzählung
XML-Code:
<xsl:template match="ul|ol|li|img|p|a|b|u|i|br|code|pre|span|iframe|del|small|hr|h1|h2|h3|acronym">
  <xsl:copy>
   <xsl:copy-of select="@*"/>
   <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>
:stupid:

Luckie 13. Apr 2006 14:29

Re: Stylesheet für XML Datei
 
Aha. Ich habe es jetzt mal selber versucht an Hand diser XML Datei:
XML-Code:
<?xml-stylesheet href="appdata/LogFile.xsl" type="text/xsl"?>
<log>
  <Start TS="2006-04-13">LogFile</Start>
  <Info TS="2006-04-13 14:59:13:546">Anzahl kopierter Dateien: 15</Info>
  <Info TS="2006-04-13 14:59:13:546">zu verarbeitende Spooldateien: 15</Info>
  <Info TS="2006-04-13 14:59:13:562">aktuelle Spooldatei: D:\Projekte Datawerk\PMD\Cold\bin\work\01.txt</Info>
  <Task TS="2006-04-13 14:59:13:593">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\01_000.txt</Task>
  <Task TS="2006-04-13 14:59:13:625">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\01_001.txt</Task>
  <Task TS="2006-04-13 14:59:13:640">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\01_002.txt</Task>
  <Info TS="2006-04-13 14:59:13:671">Spooldatei 01.txt gelöscht</Info>
  <Info TS="2006-04-13 14:59:13:687">aktuelle Spooldatei: D:\Projekte Datawerk\PMD\Cold\bin\work\02.txt</Info>
  <Task TS="2006-04-13 14:59:13:703">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\02_000.txt</Task>
  <Task TS="2006-04-13 14:59:13:734">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\02_001.txt</Task>
  <Task TS="2006-04-13 14:59:13:750">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\02_002.txt</Task>
  <Info TS="2006-04-13 14:59:13:781">Spooldatei 02.txt gelöscht</Info>
  <Info TS="2006-04-13 14:59:13:796">aktuelle Spooldatei: D:\Projekte Datawerk\PMD\Cold\bin\work\03.txt</Info>
  <Task TS="2006-04-13 14:59:13:828">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\03_000.txt</Task>
  <Task TS="2006-04-13 14:59:13:843">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\03_001.txt</Task>
  <Task TS="2006-04-13 14:59:13:875">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\03_002.txt</Task>
  <Info TS="2006-04-13 14:59:13:890">Spooldatei 03.txt gelöscht</Info>
  <Info TS="2006-04-13 14:59:14:234">aktuelle Spooldatei: D:\Projekte Datawerk\PMD\Cold\bin\work\08.txt</Info>
  <Task TS="2006-04-13 14:59:14:265">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\08_000.txt</Task>
  <Task TS="2006-04-13 14:59:14:281">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\08_001.txt</Task>
  <Task TS="2006-04-13 14:59:14:312">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\08_002.txt</Task>
  <Info TS="2006-04-13 14:59:14:328">Spooldatei 08.txt gelöscht</Info>
  <Info TS="2006-04-13 14:59:14:343">aktuelle Spooldatei: D:\Projekte Datawerk\PMD\Cold\bin\work\09.txt</Info>
  <Task TS="2006-04-13 14:59:14:390">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\09_000.txt</Task>
  <Task TS="2006-04-13 14:59:14:421">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\09_001.txt</Task>
  <Task TS="2006-04-13 14:59:14:453">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\09_002.txt</Task>
  <Info TS="2006-04-13 14:59:14:468">Spooldatei 09.txt gelöscht</Info>
  <Info TS="2006-04-13 14:59:14:484">aktuelle Spooldatei: D:\Projekte Datawerk\PMD\Cold\bin\work\10.txt</Info>
  <Task TS="2006-04-13 14:59:14:515">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\10_000.txt</Task>
  <Task TS="2006-04-13 14:59:14:546">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\10_001.txt</Task>
  <Task TS="2006-04-13 14:59:14:562">Erstelle Importdokument D:\Projekte Datawerk\PMD\Cold\bin\work\import\10_002.txt</Task>
  <Info TS="2006-04-13 14:59:14:593">Spooldatei 10.txt gelöscht</Info>
  <Ende TS="2006-04-13 14:59:17:250">LogDatei wurde geschlossen.</Ende>
</log>
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="log">
  <html>
  <head>
     <title>LogFile</title>
     <link rel="stylesheet" type="text/css" href="appdata/stylesheet.css"/>
  </head>
  <body>
    <div>
     <h1>LogFile</h1>
     <hr/>
       <xsl:apply-templates />
       


      <hr/>
    </div>
  </body>
  </html>
</xsl:template>

<xsl:template match="Info">
      <xsl:name>


      <xsl:apply-templates/>
</xsl:template>

<!-- <xsl:template match="ziel">
   <tr><td><xsl:value-of select="@kennung"/></td><td><xsl:apply-templates/></td></tr>
</xsl:template> -->

</xsl:stylesheet>
aber da sagt er mir schon gleich am Anfang:
Zitat:

Das Endtag 'xsl:template' stimmt nicht mit dem Starttag 'xsl:name' überein. Fehler beim Bearbeiten der Ressource 'file:///D...

</xsl:template>
--^
Es soll nachher eine Tabelle geben mit den Spalten:
Kategorie, Timestamp, Text
Wobei Kategorie der Name des Elemetes ist, Timestamp das Attribut und Text der Inhalt des Elemetes. Es wäre dann noch schön, wenn man die Spalten entsprechend Färben könnte: Kategorie Info schwarz, Kategorie task blau und Kategorie Error rot oder so.

So:
Code:
<xsl:template match="log">
  <html>
  <head>
     <title>LogFile</title>
     <link rel="stylesheet" type="text/css" href="appdata/stylesheet.css"/>
  </head>
  <body>
     <h1>LogFile</h1>
     <hr/>
       <table>
         <tr><th>Kategorie</th><th>Zeitstempel</th><th>Text</th></tr>
         <tr>
         <xsl:apply-templates />
         </tr>
       </table>
       


      <hr/>
  </body>
  </html>
</xsl:template>

<xsl:template match="Info">
      <td></td><td><xsl:value-of select="@TS"/></td><td></td>
      <xsl:apply-templates />
</xsl:template>

<xsl:template match="Task">
      <td></td><td><xsl:value-of select="@TS"/></td><td></td>
      <xsl:apply-templates />
</xsl:template>

<xsl:template match="Error">
      <td></td><td><xsl:value-of select="@TS"/></td><td></td>
      <xsl:apply-templates />
</xsl:template>
Gibt er mir immer nur den Wert der Eloemete aus, von der Tabelle ist aber nichts zu sehen.

MathiasSimmack 13. Apr 2006 15:42

Re: Stylesheet für XML Datei
 
Nette kleine Übung für mich :thumb:
XML-Code:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="log">
  <html>
  <head>
     <title>LogFile</title>
     <style type="text/css"><![CDATA[

     .error {
        background-color:red;
        color:black;
     }

    .info {
       background-color:green;
       color:white;
    }

    .task {
       background-color:yellow;
       color:black;
    }

     ]]></style>
  </head>
  <body>
     <h1>LogFile</h1>
     <hr/>
       <table>
         <tr><th>Kategorie</th><th>Zeitstempel</th><th>Text</th></tr>
         <xsl:apply-templates/>
       </table>
       


      <hr/>
  </body>
  </html>
</xsl:template>

<xsl:template match="Info|Task|Error|Start|Ende">
   <tr>
      <xsl:attribute name="class">
         <xsl:choose>
            <xsl:when test="name()='Info'"><xsl:text>info</xsl:text></xsl:when>
            <xsl:when test="name()='Task'"><xsl:text>task</xsl:text></xsl:when>
            <xsl:when test="name()='Error'"><xsl:text>error</xsl:text></xsl:when>
            <xsl:otherwise />
         </xsl:choose>
      </xsl:attribute>
      <td><xsl:value-of select="name()"/></td>
      <td><xsl:value-of select="@TS"/></td>
      <td><xsl:apply-templates /></td>
   </tr>
</xsl:template>

</xsl:stylesheet>
:zwinker:

Luckie 13. Apr 2006 15:50

Re: Stylesheet für XML Datei
 
Ui, ich dachte nicht, dass es so komplex wird.

Aber eins noch, er stolpert über das "ö" trotz:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
Zitat:

Im Textinhalt wurde ein ungültiges Zeichen gefunden. Fehler beim Bearbeiten der Ressource 'file:///D:/Projekte Datawerk/PMD...

<Info TS="2006-04-13 16:47:43:234">Spooldatei 01.txt gel
:gruebel:

MathiasSimmack 13. Apr 2006 15:54

Re: Stylesheet für XML Datei
 
Zitat:

Zitat von Luckie
Ui, ich dachte nicht, dass es so komplex wird.

Wieso? Den ganzen Stylesheetkram kannst du doch in die CSS auslagern, wie du es oben gemacht hast. Du musst dich im XSL-Stylesheet nur an gültiges HTML halten (*), wobei du beachten musst, dass es trotzdem eine XML-Datei ist (sprich: schließende Tags müssen sein, usw.).

Zitat:

Aber eins noch, er stolpert über das "ö" [...]
Nicht bei mir, und ich habe einfach nur deine XML-Datei aus der DP in mein Notepad kopiert. :gruebel:


* Ist mir bei deiner Tabelle in deinem Stylesheet aufgefallen. Das war nicht ganz korrektes HTML. Zumindest wäre nicht die 3spaltige Tabelle entstanden, die du wolltest. :zwinker:

Luckie 13. Apr 2006 15:56

Re: Stylesheet für XML Datei
 
Dort hatte ich wohl schon die "ö"s durch "oe" ersetzt. Hm, doch nicht. :gruebel:

Matze 13. Apr 2006 15:56

Re: Stylesheet für XML Datei
 
Hi. Vielleicht hab ich's auch völlig falsch verstanden, aber wenn du mit PHP den Header sendest, stellen die Browser (IE + FF auf jedenfall) die Datei gleich strukturiert mit Code-Folding dar:

Code:
<?php

  header("Content-type: text/xml");

?>
Hier ein Beispiel. Wobei der IE 7 das dann als Newsfeed anzeigt, das ist dann vielleicht doch nichts für dich.

Luckie 13. Apr 2006 15:59

Re: Stylesheet für XML Datei
 
Es sind lokale Dateien.

alcaeus 13. Apr 2006 16:12

Re: Stylesheet für XML Datei
 
Zitat:

Zitat von Matze
Hi. Vielleicht hab ich's auch völlig falsch verstanden

Hast du :mrgreen:

Mit den XSL-Templates kannst du das xml-File als HTML anzeigen lassen; das heisst die Informationen in Tabellen anzeigen, einen Header einfuegen usw. So kannst du es im Browser schoen darstellen, aber immer noch gut maschinell auslesen (und dann wieder anders anzeigen) ;)

Greetz
alcaeus

Luckie 13. Apr 2006 20:19

Re: Stylesheet für XML Datei
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang mal beide Dateien zum Testen.

MathiasSimmack 14. Apr 2006 14:47

Re: Stylesheet für XML Datei
 
:roll: Ja, Micha, der IE bemängelt in dem Fall nicht das Stylesheet sondern deine XML-Datei. Wenn du also Umlaute benutzt, dann musst du in der XML-Datei das Encoding setzen. :stupid: Kleine Ursache, große Wirkung, denn nach dem Patch sehe ich deine Tabelle, die du noch suchst. :mrgreen:

MrKnogge 14. Apr 2006 15:09

Re: Stylesheet für XML Datei
 
Ist es damit auch möglich, ein Bild anzeigen zu lassen, dessen Pfad in der XML-Datei steht ?

gruss

MathiasSimmack 14. Apr 2006 18:16

Re: Stylesheet für XML Datei
 
Wenn du dem Stylesheet "sagst", wie es bei dem Bild bzw. -pfad reagieren soll, natürlich ... Klar sollte doch sein, dass sich der XML-Parser an sich nicht dafür interessiert, was er da parst. Für ihn sind das alles nur Knoten mit bzw. ohne Inhalt. Den Parser interessiert nur die Syntax der XML-Datei an sich. Wie du die Knoten umwandelst, bestimmst du letztlich selbst.

MrKnogge 22. Apr 2006 23:41

Re: Stylesheet für XML Datei
 
könntest du mir ein Beispiel posten ?

marabu 23. Apr 2006 08:39

Re: Stylesheet für XML Datei
 
Hallo Christian,

StyleSheet ist manchmal ein überladener Begriff. Angenommen du hast ein XML-Dokument, welches eine Pfadangabe für ein Bild enthält. Dein XML-Dokument kann direkt mit CSS gerendert werden - und dann würde ich von einem StyleSheet sprechen. Oder es findet zuerst eine Übersetzung von XML nach XHTML via XSL-T statt - da finde ich StyleSheet etwas verwirrend, da es sich eigentlich nicht um eine Layout-Kontrolle handelt, sondern um eine Umformung (von XML nach XHTML), aber das hat einen historischen Hintergrund.

In XML selbst kannst du die Semantik in "<bild>Pfadangabe</bild>" nicht rüberbringen. Wenn du mit XSL-T zuerst eine Übersetzung nach [img]Pfadangabe[/img] vornimmst, dann weiß die rendering engine deines Browsers, was zu tun ist.

Grüße vom marabu


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