Announcement

Collapse
No announcement yet.

xml-tags zusammenfassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • xml-tags zusammenfassen

    Hallo zusammen,

    ich möchte aus folgender struktur:

    Code:
    <Termine>
      <Termin>
        <Titel></Titel>
        <Datum>07.01. - 07.01.2011</Datum>
        <Preis>5 €</Preis>
        <Dauer>1 Tage</Dauer>
      </Termin>
      <Termin>
        <Titel></Titel>
        <Datum>10.01. - 17.01.2011</Datum>
        <Preis>10 €</Preis>
        <Dauer>8 Tage</Dauer>
       </Termin>
    .
    .
    .
    </Termine>
    diese Struktur per xslt erzeugen:

    Code:
    <Termine>
                    <Reisetitel>
                      <Titel></Titel>
                      <Titel></Titel>
                        .
                        .
                        .
                    </Reisetitel>
                    <Reisedauer>
                      <Dauer>1 Tage</Dauer>
                      <Dauer>8 Tage</Dauer>
                        .
                        .
                        .
                    </Reisedauer>
                    <Reisedatum>
                      <Datum>07.01. - 07.01.2011</Datum>
                      <Datum>10.01. - 17.01.2011</Datum>
                        .
                        .
                        .
                    </Reisedatum>
                    <Reisepreis>
                      <Preis>5 €</Preis>
                      <Preis>10 €</Preis>
                        .
                        .
                        .
                    </Reisepreis>
    </Termine>
    ich dacht es funktioniert mit dieser xslt:

    <xsl:template match="Termine">
    <Termine>
    <xsl:apply-templates/>
    </Termine>
    </xsl:template>

    <xsl:template match="Termin">
    <Termin>
    <Titel>
    <xsl:value-of select="Titel"/>
    </Titel>
    <Dauer>
    <xsl:value-of select="Dauer"/>
    </Dauer>
    <Datum>
    <xsl:value-of select="Datum"/>
    </Datum>
    <Preis>
    <xsl:value-of select="Preis"/>
    </Preis>
    </Termin>
    </xsl:template>

    <xsl:template match="Termine">
    <Termine>
    <Reisetitel>
    <xsl:value-of select="Termin/Titel"/>
    </Reisetitel>
    <Reisedauer>
    <xsl:value-of select="Termin/Dauer"/>
    </Reisedauer>
    <Reisedatum>
    <xsl:value-of select="Termin/Datum"/>
    </Reisedatum>
    <Reisepreis>
    <xsl:value-of select="Termin/Preis"/>
    </Reisepreis>
    </Termine>
    </xsl:template>

    Hab mal wieder versucht aber leider funktionierts nicht so wie ich will…

    Bitte helft mir... Danke

    VG Nicole

  • #2
    Willst du das programmatisch für beliebige Elemente machen? Dann kann man das mit XSLT 2.0 so machen:
    Code:
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="2.0">
      
      <xsl:output method="xml" indent="yes"/>
      <xsl:strip-space elements="*"/>
      
      <xsl:template match="Termine">
        <xsl:copy>
          <xsl:for-each-group select="Termin/*" group-by="node-name(.)">
            <xsl:element name="Reise{lower-case(string(current-grouping-key()))}">
              <xsl:copy-of select="current-group()"/>
            </xsl:element>
          </xsl:for-each-group>
        </xsl:copy>
      </xsl:template>
      
    </xsl:stylesheet>
    XSLT 2.0 kann man mit Saxon 9 (http://saxon.sourceforge.net/), AltovaXML Tools (http://www.altova.com/altovaxml.html) und XQSharp (http://www.xqsharp.com/) ausführen.
    Mit Saxon 9 ergibt sich dann folgendes Resultat:
    Code:
    <Termine>
       <Reisetitel>
          <Titel/>
          <Titel/>
       </Reisetitel>
       <Reisedatum>
          <Datum>07.01. - 07.01.2011</Datum>
          <Datum>10.01. - 17.01.2011</Datum>
       </Reisedatum>
       <Reisepreis>
          <Preis>5 €</Preis>
          <Preis>10 €</Preis>
       </Reisepreis>
       <Reisedauer>
          <Dauer>1 Tage</Dauer>
          <Dauer>8 Tage</Dauer>
       </Reisedauer>
    </Termine>

    Comment


    • #3
      Hallo Martin,

      super genau sowas hab ich gesucht. Hab das auch mit saxon 9 gemacht. Hast Du zufällig ne Ahnung warum es nicht über InDesign mit der Importfunktion geht? Ansonsten muss ich halt erst alle mit Saxon umformen.

      Vielen Dank aber schon mal vorweg
      Nicole

      Comment


      • #4
        Saxon 9 ist ein XSLT 2.0 Prozessor und das Stylesheet, das ich gepostet habe, erfordert einen solchen. Ich kenne InDesign nicht, aber wenn es nicht funktioniert, benutzt InDesign vermutlich einen XSLT 1.0 Prozessor. Ob man InDesign so konfigurieren kann, dass es einen XSLT 2.0 Prozessor wie Saxon oder AltovaXML Tools benutzt, ist mir nicht bekannt. Sonst bleibt dir in der Tat nur, den Transformationsschritt mit Saxon oder Altova unabhängig von InDesign durchzuführen.

        Comment

        Working...
        X