Announcement

Collapse
No announcement yet.

Dynamische auswahl in for-each

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

  • Dynamische auswahl in for-each

    Hallo...

    Ich habe ein kleines Problem mit einer for-each schleife..

    Meine zu verarbeitende Xml-Datei sieht ungefaehr so aus:

    <List>
    <liste_regionen_de>
    <region>Deutschland</region>
    <region>Frankreich</region>
    </liste_regionen_de>
    </List>

    oder

    <List>
    <liste_regionen_en>
    <region>Germany</region>
    <region>France</region>
    <liste_regionen_en>
    </List>

    Nun moechte ich in abhaengigkeit eine Variablen ueber eine schleife alle region werte auslesen lassen.. in der variablen steht entweder de oder en

    Im moment mache ich das so das ich fuer jede sprache eine Schleife habe...

    <xsl:for-each select="liste_regionen_de/region">
    und
    <xsl:for-each select="liste_regionen_en/region">

    da je nach sprache immer nur eine liste in der Xml datei ist funktioniert das so.....allerdings ist mir das zu unflexibel wenn evtl neue sprachen dazukommen... ich moechte jetzt etwas in dieser richtung machen:

    <xsl:for-each select="liste_regionen_$pagelang/region">

    leider bekomme ich dabei immer fehlermeldungen.. egal wie ichs mache.. hab auch schon alle moegliche variationen mit {} usw. ausprobiert....

    waere echt genial wenn da jemand eine loesung haette...

    Danke schonmal

    Bye Swen

  • #2
    Hallo Swen,

    Der Trick dabei ist, mittels "*" erstmal alle Elemente zu selektieren und dann eine Filterung mittels [...] durchzuführen, wobei der Name des Elements geprüft wird:

    <xsl:template match="/">
    <xsl:variable name="var" select="'A'"/>
    <xsl:for-each select="/root/*[name() = concat('test_',$var)]">
    <xsl:copy-of select="."/>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>

    z.B. für die XML-Datei:

    <root>
    <test_A></test_A>
    <test_B></test_B>
    </root>

    Deine for-each-Anweisung müsste also lauten:

    <xsl:for-each select="*[name() = concat('liste_regionen_', $pagelang)]/region">

    Viele Grüße

    Martin
    www.aboutxml.d
    Martin Szugat
    www.aboutxml.de

    Comment

    Working...
    X