Delphi-PRAXiS
Seite 1 von 2  1 2      

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 Uhr.
Seite 1 von 2  1 2      

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