tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
853
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    chaertl chaertl ist offline Mitglied
    Registriert seit
    May 2005
    Beiträge
    17
    Hallo Zusammen,

    habe da eine kleine Frage, die ich recht kiffelig finde und zu der mir einfach keine Lösung einfallen will:

    Ich habe folgendes xml-Dokument:

    ...
    <titel>Mustertitel</titel>
    <autoren>Hans Dampf, George W. Bush, Max Mustermann, Hans im Glück, Donald Duck</autoren>
    ...

    Daraus möchte ich durch eine Transformation folgendes bekommen:
    <autoren>
    <autor>
    <vorname>Hans</vorname>
    <nachname>Dampf</nachname>
    </autor>
    <autor>
    <vorname>George</vorname>
    <vorname>W</vorname>
    <nachname>Bush</nachname>
    </autor>
    usw.

    Ich habe aber keine Ahnung wie ich das hinbekommen kann den String mit den ganzen Namen so zu zerstückeln, v.a. Position für Position um so an die einzelnen Teile zu kommen.

    Wenn mir da jemand einen Tip hätte wäre ich sehr dankbar.

    Gruß
    Christian
     

  2. #2
    THMD THMD ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Beiträge
    122
    N'Abend,

    also ich versuchs mal, obwohl meine XSLT-Kentnisse schon etwas eingerostet sind. Probier mal folgendes:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    
    <xsl:template match="titel/autoren">
    <body>
      <xsl:call-template name="splitter">
        <xsl:with-param name="str" select="."/>
      </xsl:call-template>
      </body>
    </xsl:template>
     
    <xsl:template name="splitter">
      <xsl:param name="str"/>
      <xsl:choose>
        <xsl:when test="contains($str,',')">
          <autor>
          <xsl:call-template name="splitter2">
            <xsl:with-param name="str2" select="substring-before($str,',')"/>
          </xsl:call-template>
           </autor>
          <xsl:call-template name="splitter">
            <xsl:with-param name="str" select="substring-after($str,',')"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <autor>
          <xsl:call-template name="splitter2">
            <xsl:with-param name="str2" select="$str"/>
          </xsl:call-template>
          </autor>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
     
    <xsl:template name="splitter2">
        <xsl:param name="str2" />
        <xsl:choose>
            <xsl:when test="contains($str2,' ')">
                <vorname>
                    <xsl:value-of select="substring-before($str2,' ')" />
                </vorname>
                <xsl:call-template name="splitter2">
                    <xsl:with-param name="str2" select="substring-after($str2,' ')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <nachname>
                    <xsl:value-of select="$str2" />
                </nachname>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    Das ganze ohne Anspruch auf Effektivität oder sonstiges, da ich nicht mehr so im Stoff stehe und deshalb nicht sagen kann, ob man solche Probleme so löst, oder es andere elegantere Möglichkeiten gibt

    THMD
     

  3. #3
    chaertl chaertl ist offline Mitglied
    Registriert seit
    May 2005
    Beiträge
    17
    Hallo THMD,

    ja, ich denke so oder so ähnlich könnte es klappen. Ich habe diese Aufgabenstellung in einer alten Klausur meines Profs gefunden. Da will er es mit zwei ineinander geschachtelten for-each Schleifen gelöst haben. Aber irgendwie habe ich den Eindruck das es eben nur über die Lösung geht, die du vorgeschlagen hast.

    Danke dir für deinen Tip.

    Gruß
    Christian
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 02.03.10, 11:00
  2. Mit Struts über Beans aus der Session iterieren
    Von Alvine im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 3
    Letzter Beitrag: 28.02.09, 08:28
  3. <c:forEach> und Iterieren über beliebig viele Parameter
    Von Zak256 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 02.01.09, 22:07
  4. Antworten: 2
    Letzter Beitrag: 25.09.06, 10:33
  5. Durch Tag-Inhalte iterieren
    Von chaertl im Forum XML Technologien
    Antworten: 0
    Letzter Beitrag: 09.06.05, 10:45