tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von hela
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
759
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    chris_head chris_head ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    22
    Hallo zusammen,

    ich versuche aus folgendem xml eine bestimmte Variation herauszufiltern (mit bestimmten Bedingungen).
    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>
    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".
    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
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    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>
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    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ß
     

  4. #4
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    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>
    chris_head bedankt sich. 

Ähnliche Themen

  1. Text filtern
    Von wachteldonk im Forum PHP
    Antworten: 3
    Letzter Beitrag: 08.07.09, 18:13
  2. Ip Filtern
    Von FCK-FAN im Forum PHP
    Antworten: 2
    Letzter Beitrag: 23.04.09, 16:40
  3. preg_match wie filtern?
    Von hehe_me im Forum PHP
    Antworten: 8
    Letzter Beitrag: 22.10.08, 19:28
  4. Array filtern?!
    Von Blaubmania im Forum PHP
    Antworten: 3
    Letzter Beitrag: 02.02.05, 15:31
  5. PLZ filtern....
    Von Gudy im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 23.07.04, 08:22