André Laugks: Name eines Elementes ermitteln

Hallo!

Ich bin eben mit XSLT auf ein Problem gestoßen. Ich möchte mir die Elementen-Namen anzeigen lassen, die im Moment abgearbeitet werden und zwar unterhalb des Elementes <item>. Innerhalb von xsl:for-each komme ich da aber nicht dran. Ich habe mein XSLT-Buch etc. durchgesucht, aber kein XPath-Ausdruck kann mir helfen. Vielleicht übersehe ich ja was.

XML-Datei

  
<?xml version="1.0" encoding="ISO-8859-1"?>  
<root>  
 <liste>  
  <item>  
   <vorname>Werner</vorname>  
   <nachname>Schmidt</nachname>  
  </item>  
  <item>  
   <vorname>Inge</vorname>  
   <nachname>Mayer</nachname>  
   <ort>Köln</ort>  
  </item>  
 </liste>  
</root>  

XSLT-Datei

  
<?xml version="1.0" encoding="ISO-8859-1"?>  
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
 <xsl:output method="html" encoding="ISO-8859-1" indent="yes" />  
  
 <xsl:template match="/root">  
  <xsl:apply-templates select="liste" />  
 </xsl:template>  
  
 <xsl:template match="liste">  
  <xsl:for-each select="item">  
    Name-Element: <xsl:value-of select="?"/>  
  </xsl:for-each>  
 </xsl:template>  
  
</xsl:stylesheet>  

André Laugks

--
Die Frau geht, die Hilti bleibt!
  1. Hallo,

    Ich bin eben mit XSLT auf ein Problem gestoßen. Ich möchte mir die Elementen-Namen anzeigen lassen, die im Moment abgearbeitet werden und zwar unterhalb des Elementes <item>. Innerhalb von xsl:for-each komme ich da aber nicht dran. Ich habe mein XSLT-Buch etc. durchgesucht, aber kein XPath-Ausdruck kann mir helfen. Vielleicht übersehe ich ja was.

    <xsl:template match="liste">
      <xsl:for-each select="item">
        Name-Element: <xsl:value-of select="name()"/> oder local-name()

    http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#name
    http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#name

    Grüße
    Thomas

    1. Hallo!

      Name-Element: <xsl:value-of select="name()"/> oder local-name()

      Mit name() und local-name() bekomme ich aber "item" angezeigt. Ich würde aber gerne "vorname", "nachname" und "ort" angezeigt bekommen.

      André Laugks

      --
      Die Frau geht, die Hilti bleibt!
      1. Hallo,

        Name-Element: <xsl:value-of select="name()"/> oder local-name()

        Mit name() und local-name() bekomme ich aber "item" angezeigt. Ich würde aber gerne "vorname", "nachname" und "ort" angezeigt bekommen.

        Verstehe.

        Je nach dem wie du es brauchst:

        <xsl:for-each select="item">
          <xsl:for-each select=".//*">
            Name-Element: <xsl:value-of select="name()"/>

        So bekommst du eine Lister der Namen der Elemente, aber vermutlich in einer einzigen Zeile ohne Zeilenumbruch.

        Oder du machst einen Template für die Elemente unter item:
        match="item//*"
            Name-Element: <xsl:value-of select="name()"/>
        ...
        <xsl:for-each select="item">
         <xsl:apply-templates />

        Grüße
        Thomas

        1. Hallo Thomas!

          <xsl:for-each select=".//*">

          So bekomme ich auch <item> angezeigt. Ich denke, weil er einen zu hoch geht. Aber ich habe folgendes gemacht:

            
          <xsl:template match="liste">  
           <xsl:for-each select="item/*">  
            Name-Element: <xsl:value-of select="name()"/>  
           </xsl:for-each>  
          </xsl:template>  
          
          

          Folgendes bekomme ich als Ausgabe:

          Name-Element: vorname
          Name-Element: nachname
          Name-Element: vorname
          Name-Element: nachname
          Name-Element: ort

          Danke für den Denkanstoß!

          Oder du machst einen Template für die Elemente unter item:

          Ich denke das ist die elegantere Weg.

          André Laugks

          --
          Die Frau geht, die Hilti bleibt!
          1. Hallo André

            <xsl:for-each select=".//*">

            So bekomme ich auch <item> angezeigt. Ich denke, weil er einen zu hoch geht. Aber ich habe folgendes gemacht:

            hm... sollte eigentlich nciht sein, denn es gilt current() "." alle ebenenen "//" elemente "*"

            <xsl:template match="liste">
            <xsl:for-each select="item/*">
              Name-Element: <xsl:value-of select="name()"/>
            </xsl:for-each>
            </xsl:template>

            
            >   
            > Folgendes bekomme ich als Ausgabe:  
            >   
            > Name-Element: vorname  
            > Name-Element: nachname  
            > Name-Element: vorname  
            > Name-Element: nachname  
            > Name-Element: ort  
            >   
            > Danke für den Denkanstoß!  
              
            Ok wenn das reicht. Aber bedenkte dass sich das nur auf die Kindelemente von item auswirkt, aber nicht auf dessen Kindelmenente etc.  
              
            Grüße  
            Thomas