1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
759
759
EMPFEHLEN
-
15.01.10 08:57 #1
- Registriert seit
- May 2007
- Beiträge
- 22
Hallo zusammen,
ich versuche aus folgendem xml eine bestimmte Variation herauszufiltern (mit bestimmten Bedingungen).
Die Filterregeln sind folgende: Ich suche generell nach dem Bauteil für einen bestimmten Typ z.B. ABC . Die erste Variation, die dem gesuchten Typ unterstützt, wird ausgewählt. Sollte es keine Bauteil für den speziellen Typ geben (für Typ ABC bei Licht) soll die Variation "alle" gewählt werden. Es gibt IMMER mindestens eine Variation für "alle".HTML-Code:<Fahrzeug> <Bauteil> <Name>Rad</Name> <Variation Typ="alle"> <RadTyp>RadAlle</RadTyp> </Variation> <Variation Typ="ABC"> <RadTyp>RadABC1</RadTyp> </Variation> <Variation Typ="ABC"> <RadTyp>RadABC2</RadTyp> </Variation> <Variation Typ="XYZ"> <RadTyp>RadXYZ123</RadTyp> </Variation> </Bauteil> <Bauteil> <Name>Frontscheinwerfer</Name> <Variation Typ="alle"> <LichtTyp>UniLicht</LichtTyp> </Variation> <Variation Typ="XYZ"> <LichtTyp>LichtXYZ456</LichtTyp> </Variation> </Bauteil> ... </Fahrzeug>
Meine Überlegung war jeweils immer alle Variationen zu einem Bauteil nach dem speziellen Typ zu durchfahren und dann die Ergebnismenge zu überprüfen. Wenn diese leer ist nochmals die Variationen zu durchlaufen und nach "alle" suchen. Leider weiß ich nicht wie man dies in xslt umsetzt ( mangels richtiges Denken in xml und/oder Wissen für xml/xslt). Daher wäre ein kleiner oder auch größerer Denkanstoß nicht schlecht.
Gruß Chris
-
15.01.10 10:35 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Hi.
GrußCode xml:1 2 3 4 5 6 7 8 9
<xsl:variable name="variation" select="Variation[@Typ = 'ABC']" /> <xsl:choose> <xsl:when test="$variation"> <xsl:value-of select="$variation" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="Variation[@Typ = 'alle']" /> </xsl:otherwise> </xsl:choose>
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo,
ich habe auch etwas gemacht, ist wahrscheinlich nicht sehr gut da ich selbst noch Anfänger in XML aber wollte es trotzdem probieren!
Ich poste dir hintereinander mal die Codes die ich verwendet und das Ergebnis der Transformation!
XML Code:
Code XML:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="C:\Documents and Settings\Chris\Desktop\bauteil.xsl"?> <Fahrzeug> <Bauteil> <Name>Rad</Name> <Variation Typ="alle"> <RadTyp>RadAlle</RadTyp> </Variation> <Variation Typ="ABC"> <RadTyp>RadABC1</RadTyp> </Variation> <Variation Typ="ABC"> <RadTyp>RadABC2</RadTyp> </Variation> <Variation Typ="XYZ"> <RadTyp>RadXYZ123</RadTyp> </Variation> </Bauteil> <Bauteil> <Name>Frontscheinwerfer</Name> <Variation Typ="alle"> <LichtTyp>UniLicht</LichtTyp> </Variation> <Variation Typ="XYZ"> <LichtTyp>LichtXYZ456</LichtTyp> </Variation> </Bauteil> </Fahrzeug>
Der XSL Code:
Code XSL:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" doctype-system="http://www.w3.org/TR/html4/strict.dtd" doctype-public="-//W3C//DTD HTML 4.01//EN"/> <xsl:template match="Fahrzeug"> <html> <head> <title> </title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="Fahrzeug"> <xsl:for-each select="Bauteil"> <xsl:value-of select="Name"/><xsl:text>: </xsl:text><br/> <xsl:choose> <xsl:when test="Variation/@Typ = 'ABC'"> <xsl:for-each select="Variation[@Typ='ABC']"> <xsl:value-of select="*"/><br /> </xsl:for-each> </xsl:when> <xsl:otherwise><xsl:value-of select="Variation[@Typ='alle']/*"/></xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Die Ausgabe der Transformation ist HTML Code und zeigt so etwas:
Code :1 2 3 4 5
Rad: RadABC1 RadABC2 Frontscheinwerfer: UniLicht
Gruß
-
Hallo zer0,
die for-each-Elemente sind nicht notwendig und wenn du eine HTML-Ausgabe machen möchtest, dann würde ich das aus semantischen Gründen in eine Liste einschließen.
Außerdem sollte eigentlich bei der Filterung nur die erste Variation ausgegeben werden. Ich würde es deshalb so machen:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
<xsl:template match="/"> <html> <head> <title>Titel</title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="Fahrzeug"> <dl> <xsl:apply-templates/> </dl> </xsl:template> <xsl:template match="Bauteil"> <dt> <xsl:value-of select="Name"/> <xsl:text>: </xsl:text> </dt> <dd> <xsl:choose> <xsl:when test="Variation[@Typ='ABC']"> <xsl:value-of select="Variation[@Typ='ABC'][1]"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="Variation[@Typ='alle']"/> </xsl:otherwise> </xsl:choose> </dd> </xsl:template>
Ähnliche Themen
-
Text filtern
Von wachteldonk im Forum PHPAntworten: 3Letzter Beitrag: 08.07.09, 18:13 -
Ip Filtern
Von FCK-FAN im Forum PHPAntworten: 2Letzter Beitrag: 23.04.09, 16:40 -
preg_match wie filtern?
Von hehe_me im Forum PHPAntworten: 8Letzter Beitrag: 22.10.08, 19:28 -
Array filtern?!
Von Blaubmania im Forum PHPAntworten: 3Letzter Beitrag: 02.02.05, 15:31 -
PLZ filtern....
Von Gudy im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 23.07.04, 08:22





Zitieren
Login





