XSL : XML -->XHTML : Absatz soll weg
Yuvi
- xsl
Ich möchte gerne aus XML Daten einen XHTML Report erstellen.
Die XML-Attribute sollen den Kopf des Reports stellen; und alles soll in einem Rahmen sein.
Ich habs halbwegs hinbekommen, doch treten dabei leider unerwünschte Absätze auf. (Zur Verdeutlichung am besten das XHTML Dokument aus dem unten angegebenen XML Dokument und dem zugehörigen Stylesheet erzeugen lassen)
Wie krieg ich diesen Absatz zwischen Lieferant und EntladeBediener weg ?
Hier mein XML Dokument :
<?xml version="1.0"?>
<Protokoll>
<Lieferant Name="xxx" Strecke="000" Kosten="yyy"/>
<Charge ChargeNr="111" EntladeBediener="aaa" Dauer="8 Stunden" WarentraegerNr="78">
<Artikel_n>
<Artikel id="999" ArtikelNrTxt="00000" Geprueft="j"/>
</Artikel_n>
</Charge>
</Protokoll>
Hier das zugehörige XSL-Stylesheet :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes">
<xsl:template match="/">
<html>
<body>
xsl:apply-templates/
</body>
</html>
<style type="text/css">
#leftright {
border-width:3px;
border-left-style:solid;
border-right-style:solid;
border-color:black;
padding:1.5em;
}
}
#ltop {
border-width:3px;
border-top-style:solid;
border-color:black;
padding:1.5em;
}
</style>
</xsl:template>
<xsl:template match="Lieferant">
<div id="leftright" style=" border-top-style:solid;" align="left">
<table class="table" border="0" cellspacing="10" cellpadding="0">
<h2><u>Protokoll</u></h2>
<tr align="left">
<th width="200">Lieferant </th>
<td width="200"><xsl:value-of select="@Name"/> </td>
</tr>
<!--> Kann man Charge Knoten anders hier einfügen ??? <!-->
<tr>
<xsl:apply-templates select="Charge"/>
</tr>
</table>
</div>
</xsl:template>
xsl:template match="Charge"
<div id="leftright" style=" border-bottom-style:solid" align="left">
<table border="0" cellspacing="0" cellpadding="3">
<tr align="left">
<th width="200">EntladeBediener</th>
<td width="200"><xsl:value-of select="@EntladeBediener"/></td>
</tr>
<tr align="left">
<th width="200">Artikel-Nr</th>
<td width="200"><xsl:value-of select="Artikel_n/Artikel/@ArtikelNrTxt"/></td>
</tr>
<tr align="left">
<th width="200">Dauer</th>
<td width="200"><xsl:value-of select="@Dauer"/></td>
</tr>
<tr align="left">
<th width="200">Chargen-Nr.</th>
<td width="200"><xsl:value-of select="@ChargeNr"/></td>
</tr>
<tr align="left">
<th width="200">Warentraeger-Nr</th>
<td width="200"><xsl:value-of select="@WarentraegerNr"/></td>
</tr>
</table>
</div>
</xsl:template>
</xsl:stylesheet>
Hi,
nix für ungut, aber hast Du schon jemals was mit html zu tun gehabt (was ja nichts macht und nicht bös gemeint ist - jeder fängt mal an)??? - ein Blick ins html hätte Dir den Fehler nämlich recht schnell verraten...
Bis auf den Umstand, dass Dein xslt recht "unbeholfen" (was ja nichts macht und nicht bös gemeint ist - jeder fängt mal an) aussieht ist es nämlich ohnehin mehr oder weniger richtig.
Der Fehler (Dein vermeintlicher Absatz) liegt nämlich im html:
1. cellspacing in der ersten Tabelle raus
2. padding für die divs raus
und schon ist der "Absatz" weg.
Dann musst Du Dein css natürlich in den noch nicht vorhandenen head Deiner html einbauen:
also:
html
head
css
/head
body
...
/body
/html
zu der Frage ob man das apply-templates für Charge anders machen kann:
In der Regel brauchst Du das select="Charge" nicht. Der XSLT Rarser sucht sich schon das passende Template selber. Findet ers selber passts. Findet ers nicht hast Du noch Unstimmigkeiten im xslt.
(Wenn man ein Template gezielt aufrufen will nimmt man normalerweise xsl:call-template name="") und gibt dann im template selbst den Namen an (xsl:template name="").
Ansonsten solltest Du Dich nur fragen, warum du eine zweite Tabelle machst.
Viele Grüße
Michael
Herzlichen Dank für deine Hilfe !!!
Hatte tatsächlich zuvor noch nie mit HTML hantiert. Jetzt hab ich mal ganz in Ruhe angeschaut, was ich da fabriziert hatte.
Die zweite Tabelle ist natürlich totaler Müll und die Templates ebenso.
Hab das alles weggemacht; jetzt ist es übersichtlicher und sieht sogar besser aus.
Kann es sein, dass mit dem Aufruf xsl:call-template name"" nur die Vorlage aufgerufen wird, aber irgendwie nicht die XML-Attribute ?
Danke nochmals für deine Antwort ! Sie war sehr wertvoll für mich !