1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

XSLT Liste durchsuchen

Dieses Thema im Forum "XML Technologien" wurde erstellt von dsNDesign, 23. März 2014.

  1. dsNDesign

    dsNDesign Erfahrenes Mitglied

    Hei,

    ich habe folgende XML-Struktur:
    Code (Text):
    1. <EVENT>
    2.     <NAME>Veranstaltung</NAME>
    3.     <GUEST>
    4.         <NAME>Hans</NAME>
    5.         <NAME>Peter</NAME>
    6.         <NAME>Harald</NAME>
    7.         <NAME>Hubert</NAME>
    8.     </GUEST>
    9. </EVENT>
    Nun möchte ich mit XSLT den Name des Events (also "Veranstaltung") ausgeben, aber nur, wenn einer der Gäste ("GUEST") Harald heißt. Sollten zwei Gäste den gleichen Namen (in diesem Fall Harald) haben, soll der Name des Events trotzdem nur einmal ausgegeben werden.

    Jemand eine Idee, wie ich das mache?

    Gruß
     
  2. Martin Honnen

    Martin Honnen Mitglied

    Mit XSLT 2.0 und
    Code (Text):
    1. <xsl:template match="/">
    2.   <xsl:value-of select="//EVENT[GUEST/NAME = 'Harald']/NAME"/>
    3. </xsl:template>
    wird der Name aller Events ausgegeben, für die mindestens ein GUEST/NAME gleich Harald ist.

    Mit XSLT 1.0 muss man etwas mehr Code schreiben:

    Code (Text):
    1. <xsl:template match="/">
    2.   <xsl:for-each select="//EVENT[GUEST/NAME = 'Harald']/NAME">
    3.      <xsl:if test="position() > 1"><xsl:text> </xsl:text></xsl:if>
    4.      <xsl:value-of select="."/>
    5.   </xsl:for-each>
    6. </xsl:template>
     
  3. xml-looser

    xml-looser Mitglied

    Die xml Datei kann direkt im Browser angeschaut werden
    Code (Text):
    1. <?xml version="1.0"?>
    2. <?xml-stylesheet type="text/xsl" href="liste.xsl" ?>
    3. <EVENT>
    4.     <NAME>Veranstaltung</NAME>
    5.     <GUEST>
    6.         <NAME>Hans</NAME>
    7.         <NAME>Peter</NAME>
    8.         <NAME>Harald</NAME>
    9.         <NAME>Hubert</NAME>
    10.         <NAME>Harald</NAME>
    11.     </GUEST>
    12. </EVENT>
    die stylesheet anweisung in datei liste.xsl schreiben

    Code (Text):
    1. <?xml version="1.0"?>
    2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3.     <xsl:output indent="yes" method="html"/>
    4.     <xsl:template match="/">
    5.         <html>
    6.             <xsl:apply-templates select="EVENT"/>
    7.         </html>
    8.     </xsl:template>
    9.     <xsl:template match="EVENT">
    10.         <table border="solid">
    11.             <xsl:apply-templates select="NAME"/>
    12.             <tbody>
    13.                 <xsl:apply-templates select="GUEST"/>
    14.             </tbody>
    15.         </table>
    16.     </xsl:template>
    17.     <xsl:template match="GUEST">
    18.         <xsl:apply-templates select="NAME">
    19.             <xsl:sort select="."/>
    20.         </xsl:apply-templates>
    21.     </xsl:template>
    22.     <xsl:template match="NAME">
    23.         <xsl:variable name="n" select="."/>
    24.         <xsl:if test="not(preceding-sibling::*[.=$n])">
    25.             <tr>
    26.                 <td>
    27.                     <xsl:value-of select="."/>
    28.                 </td>
    29.             </tr>
    30.         </xsl:if>
    31.     </xsl:template>
    32. </xsl:stylesheet>
    oder mit xsl prozessor bearbeiten
    http://www.oio.de/public/xml/xslt-prozessoren.htm

    ergebniss:
    Code (Text):
    1. <html>
    2.   <table border="solid">
    3.     <tr>
    4.       <td>Veranstaltung</td>
    5.     </tr>
    6.     <tbody>
    7.       <tr>
    8.         <td>Hans</td>
    9.       </tr>
    10.       <tr>
    11.         <td>Harald</td>
    12.       </tr>
    13.       <tr>
    14.         <td>Hubert</td>
    15.       </tr>
    16.       <tr>
    17.         <td>Peter</td>
    18.       </tr>
    19.     </tbody>
    20.   </table>
    21. </html>
    eine html Datei die Browser angeschaut werden kann
     
Die Seite wird geladen...