XSL und Bedingungen
katja
- xsl
0 katja0 Thomas J.S.
0 Ballantino
Hallo zusammen,
ich moechte per xslt folgende Bedingungen auf untenstehende Baumstruktur anwenden,weiss aber nicht wie?!
Dieses sind die Bedingungen:
Wenn das Element <Assoziierter_Kunde> eine 0 enthaelt und gleichzeitig der jeweilige Kunde (wenn wir von oben anfangen
also der mit der Nr. 74614) in dem <Assoziierter_Kunde>-Element eines ANDEREN Kunden auftaucht (in untenstehendem Bsp.
also bei dem Kunden mit der Nr. 85012), moechte ich "ja" ausgeben.
Andersherum, wenn das <Assoziierter_Kunde>-Element eines Kunden 0 enthaelt, die KundenNr. dieses Kunden aber NICHT
in dem <Assoziierter_Kunde>-Element eines anderen Kunden auftaucht, bedeutet das "nein".
<Kunde>
<Nr>74614</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
</Kunde>
<Kunde>
<Nr>74616</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
</Kunde>
<Kunde>
<Nr>85012</Nr>
<Assoziierter_Kunde>74614</Assoziierter_Kunde>
</Kunde>
<Kunde>
<Nr>92321</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
</Kunde>
<Kunde>
<Nr>74615</Nr>
<Assoziierter_Kunde>74616</Assoziierter_Kunde>
</Kunde>
Ich komme einfach nicht weiter - das ist alles was ich habe:
xsl:choose
<xsl:when test="Assoziierter_Kunde[.='0'] and Assoziierter_Kunde[.=???]">
xsl:textja</xsl:text>
</xsl:when>
<xsl:when test="Assoziierter_Kunde[.=???]">
xsl:textnein</xsl:text>
</xsl:when>
</xsl:choose>
Ich arbeite mit apply-templates.
Faellt vielleicht jemandem ein Loesungsansatz ein?
Vielen Dank im Vorraus,
Katja
Hallo alle,
ich hab's jetzt doch selber hinbekommen,
und zwar so:
<xsl:variable name="nr" select="NR"/>
<xsl:variable name="var">
xsl:choose
<xsl:when test="..//Assoziierter_Kunde[.=$nr] or Assoziierter_Kunde[.>0]">
xsl:textJa</xsl:text>
</xsl:when>
xsl:otherwise
xsl:textNein</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
Jetzt weiss ich aber wirklich nicht weiter.
Und zwar moechte ich jeweils fuer jedes "Ja" auch die entsprechende Telefonnr.
des jeweils referenzierten Kunden ausgeben.
D.h. wenn das Element <Assoziierter_Kunde> eine 0 enthaelt und gleichzeitig der jeweilige Kunde (wenn wir von oben anfangen
also der mit der Nr. 74614) in dem <Assoziierter_Kunde>-Element eines ANDEREN Kunden auftaucht (in untenstehendem Bsp.
also bei dem Kunden mit der Nr. 85012),
moechte ich fuer Kunde 74614 die Tel.Nr. von Kunde 85012 ausgeben und umgekehrt.
<Kunde>
<Nr>74614</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
<TelNr>456224744</TelNr>
</Kunde>
<Kunde>
<Nr>74616</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
<TelNr>456714744</TelNr>
</Kunde>
<Kunde>
<Nr>85012</Nr>
<Assoziierter_Kunde>74614</Assoziierter_Kunde>
<TelNr>631232214</TelNr>
</Kunde>
<Kunde>
<Nr>92321</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
</Kunde>
<Kunde>
<Nr>74615</Nr>
<Assoziierter_Kunde>74616</Assoziierter_Kunde>
</Kunde>
Vielen vielen Dank fuer jede Hilfe.
Katja
Hallo
ich hab's jetzt doch selber hinbekommen,
nur du fragst hier etwas anderes ab, als du im vorherigen posting gesagt hast.
moechte ich fuer Kunde 74614 die Tel.Nr. von Kunde 85012 ausgeben und umgekehrt.
"und umgekehrt" wiederspricht hier wiederum dem ansatz "wenn associerter_kunde = 0" !?!
aber warum nicht:
---------die xsl datei----------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/root">
<xsl:variable name="assoc" select="//Kunde/Assoziierter_Kunde" />
<html>
<head></head>
<body>
<xsl:for-each select="Kunde">
<xsl:variable name="num" select="Nr" />
<xsl:variable name="assocnum" select="Assoziierter_Kunde" />
<xsl:variable name="telnum1" select="following-sibling::Kunde[Assoziierter_Kunde = $num]/TelNr | preceding-sibling::Kunde[Assoziierter_Kunde = $num]/TelNr" />
<xsl:variable name="telnum2" select="following-sibling::Kunde[Nr = $assocnum]/TelNr | preceding-sibling::Kunde[Nr = $assocnum]/TelNr" />
<p>
<i><xsl:value-of select="position()" /></i> 
xsl:choose
<xsl:when test="Assoziierter_Kunde = 0 and Nr = $assoc">
<b>ja</b> 
xsl:choose
<xsl:when test="$telnum1"><u>telnumm assoc.k:(<xsl:value-of select="$telnum1" />)</u> </xsl:when>
<xsl:when test="$telnum2"><u>telnumm assoc.k:(<xsl:value-of select="$telnum2" />)</u> </xsl:when>
xsl:otherwise</xsl:otherwise>
</xsl:choose>
(nummer:<xsl:value-of select="Nr" /> / assoc.kunde:<xsl:value-of select="Assoziierter_Kunde" /> / telnum:<xsl:value-of select="TelNr" />)
</xsl:when>
<xsl:when test="Assoziierter_Kunde = 0 and not(Nr = $assoc)">
<b>nein</b> 
xsl:choose
<xsl:when test="$telnum1"><u>telnumm assoc.k:(<xsl:value-of select="$telnum1" />)</u> </xsl:when>
<xsl:when test="$telnum2"><u>telnumm assoc.k:(<xsl:value-of select="$telnum2" />)</u> </xsl:when>
xsl:otherwise</xsl:otherwise>
</xsl:choose>
(nummer:<xsl:value-of select="Nr" /> / assoc.kunde:<xsl:value-of select="Assoziierter_Kunde" /> / telnum:<xsl:value-of select="TelNr" />)
</xsl:when>
xsl:otherwise
trifft keines zu 
xsl:choose
<xsl:when test="$telnum1"><u>telnumm assoc.k:(<xsl:value-of select="$telnum1" />)</u> </xsl:when>
<xsl:when test="$telnum2"><u>telnumm assoc.k:(<xsl:value-of select="$telnum2" />)</u> </xsl:when>
xsl:otherwise</xsl:otherwise>
</xsl:choose>
(nummer:<xsl:value-of select="Nr" /> / assoc.kunde:<xsl:value-of select="Assoziierter_Kunde" /> / telnum:<xsl:value-of select="TelNr" />)
</xsl:otherwise>
</xsl:choose>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
-----------------------
deine xml hane ich nur so weit ergänzt:
<?xml version="1.0"?>
<root>
<Kunde>
<Nr>74614</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
<TelNr>456224744</TelNr>
</Kunde>
und wo weiter mit den kunden.
</root>
-------
grüße
thomas
Hallo Thomas,
puuhh... das ist ja ein dicker Hund!
Vielen vielen Dank,
werde mich jetzt gleich mal ranmachen.
Gruss, Katja
Jo - es funktioniert!
1000 Dank nochmal!
Das haette ich alleine nicht hinbekommen.
Gruss, Katja
hallo,
Jo - es funktioniert!
hört man gerne. ;-)
1000 Dank nochmal!
ebenfalls gerne.
Das haette ich alleine nicht hinbekommen.
das sei dahingestellt.
grüße
thomas
ps: danke für den feedback
Hallo Thomas,
aber warum nicht:
aha, nun habe ich auch verstanden, was das Problem ausmacht und v.a. wie es zu lösen ist, also auch von meiner Seite zunächst mal Dank und gleich ein kleines "aber" ;-):
die Variable:
<xsl:variable name="telnum2" select="following-sibling::Kunde[Nr = $assocnum]/TelNr | preceding-sibling::Kunde[Nr = $assocnum]/TelNr" />
ist doch eigentlich überflüssig und damit auch die Tests darauf weiter unten?
Oder ist mir da was verborgen geblieben?
Gruß
Franz
Hallo Franz,
aha, nun habe ich auch verstanden, was das Problem ausmacht und v.a. wie es zu lösen ist, also auch von meiner Seite zunächst mal Dank und gleich ein kleines "aber" ;-):
die Variable:
<xsl:variable name="telnum2" select="following-sibling::Kunde[Nr = $assocnum]/TelNr | preceding-sibling::Kunde[Nr = $assocnum]/TelNr" />
ist doch eigentlich überflüssig und damit auch die Tests darauf weiter unten?
Oder ist mir da was verborgen geblieben?
nein, nicht (ganz) überflüssig:
katja schrieb:
"D.h. wenn das Element <Assoziierter_Kunde> eine 0 enthaelt und gleichzeitig der jeweilige Kunde (wenn wir von oben anfangen
also der mit der Nr. 74614) in dem <Assoziierter_Kunde>-Element eines ANDEREN Kunden auftaucht (in untenstehendem Bsp.
also bei dem Kunden mit der Nr. 85012),
moechte ich fuer Kunde 74614 die Tel.Nr. von Kunde 85012 ausgeben und umgekehrt."
$telnum1 erfüllt die forderung: bei kunde-74614 wird die telfonnummer von kunde-85012 angezeigt.
$telnum2 erfüllt eine ganz andere forderung, was katja mit einem leichten "und umgekehrt" genannt hat. also beim kunde-85012 erschient die telefonnummer von kunde-74614.
aber diese "und umgekehrt" wiederspricht eben dem ansatz "wenn das Element <Assoziierter_Kunde> eine 0 enthaelt" denn beim kunde-85012 ist der inhalt vom element <Assoziierter_Kunde> nicht gleich 0.
darauf habe ich ja hingewisen und gemeint "aber warum nicht" ;-)
überflüssig ist $telnum2 nur in den ersten 2 xsl:when (falls du diese gemeint hast, dann hast du recht.) nicht überflüssig ist $telnum2 im xsl:otherwise denn dort wird die bedingung <Assoziierter_Kunde> != 0 erfüllt.
grüße
thomas
damit es klarar ist was ich meine,
hier eine berenigte variante:
grüße
thomas
------------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/root">
<xsl:variable name="assoc" select="//Kunde/Assoziierter_Kunde" />
<html>
<head></head>
<body>
<xsl:for-each select="Kunde">
<xsl:variable name="num" select="Nr" />
<xsl:variable name="assocnum" select="Assoziierter_Kunde" />
<xsl:variable name="telnum1" select="following-sibling::Kunde[Assoziierter_Kunde = $num]/TelNr | preceding-sibling::Kunde[Assoziierter_Kunde = $num]/TelNr" />
<xsl:variable name="telnum2" select="following-sibling::Kunde[Nr = $assocnum]/TelNr | preceding-sibling::Kunde[Nr = $assocnum]/TelNr" />
<p>
<i><xsl:value-of select="position()" /></i> 
xsl:choose
<xsl:when test="Assoziierter_Kunde = 0 and Nr = $assoc">
<b>ja</b> 
<xsl:if test="$telnum1"><u>telnumm assoc.k:(<xsl:value-of select="$telnum1" />)</u> </xsl:if>
(nummer:<xsl:value-of select="Nr" /> / assoc.kunde:<xsl:value-of select="Assoziierter_Kunde" /> / telnum:<xsl:value-of select="TelNr" />)
</xsl:when>
<xsl:when test="Assoziierter_Kunde = 0 and not(Nr = $assoc)">
<b>nein</b> 
<xsl:if test="$telnum1"><u>telnumm assoc.k:(<xsl:value-of select="$telnum1" />)</u> </xsl:if>
(nummer:<xsl:value-of select="Nr" /> / assoc.kunde:<xsl:value-of select="Assoziierter_Kunde" /> / telnum:<xsl:value-of select="TelNr" />)
</xsl:when>
xsl:otherwise
trifft keines zu 
<xsl:if test="$telnum2"><u>telnumm assoc.k:(<xsl:value-of select="$telnum2" />)</u> </xsl:if>
(nummer:<xsl:value-of select="Nr" /> / assoc.kunde:<xsl:value-of select="Assoziierter_Kunde" /> / telnum:<xsl:value-of select="TelNr" />)
</xsl:otherwise>
</xsl:choose>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Hallo zusammen,
ich moechte per xslt folgende Bedingungen auf untenstehende Baumstruktur anwenden,weiss aber nicht wie?!
Dieses sind die Bedingungen:
Wenn das Element <Assoziierter_Kunde> eine 0 enthaelt und gleichzeitig der jeweilige Kunde (wenn wir von oben anfangen
also der mit der Nr. 74614) in dem <Assoziierter_Kunde>-Element eines ANDEREN Kunden auftaucht (in untenstehendem Bsp.
also bei dem Kunden mit der Nr. 85012), moechte ich "ja" ausgeben.
Andersherum, wenn das <Assoziierter_Kunde>-Element eines Kunden 0 enthaelt, die KundenNr. dieses Kunden aber NICHT
in dem <Assoziierter_Kunde>-Element eines anderen Kunden auftaucht, bedeutet das "nein".
<Kunde>
<Nr>74614</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
</Kunde>
<Kunde>
<Nr>74616</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
</Kunde>
<Kunde>
<Nr>85012</Nr>
<Assoziierter_Kunde>74614</Assoziierter_Kunde>
</Kunde>
<Kunde>
<Nr>92321</Nr>
<Assoziierter_Kunde>0</Assoziierter_Kunde>
</Kunde>
<Kunde>
<Nr>74615</Nr>
<Assoziierter_Kunde>74616</Assoziierter_Kunde>
</Kunde>
Ich komme einfach nicht weiter - das ist alles was ich habe:
xsl:choose
<xsl:when test="Assoziierter_Kunde[.='0'] and Assoziierter_Kunde[.=???]">
xsl:textja</xsl:text>
</xsl:when>
<xsl:when test="Assoziierter_Kunde[.=???]">
xsl:textnein</xsl:text>
</xsl:when>
</xsl:choose>
Ich arbeite mit apply-templates.
Faellt vielleicht jemandem ein Loesungsansatz ein?
Vielen Dank im Vorraus,
Katja
Hallo !
Hab die Unterlagen dazu auf der Arbeit ! Werd da morgen mal nachschauen !