fjh: xPath: Verständnisproblem bei Adressierung mit Positionsangabe

Beitrag lesen

allo Armin,

Der Locationpath ".//nachname" müsste meiner Meinung nach ein Knotenset mit vier Knoten zurückgeben.

Tut er auch. Nur wird dieser Ausdruck als Wert des select-Attributs des xsl:value-of-Elements als String ausgewertet. Falls das Ergebnis des Ausdrucks kein String ist (sondern wie in Deinem Falle eine Knotenmenge) erfolgt eine implizite Konvertierung wobei für eine Knotenmenge nur der erste Knoten in Dokumentenordnung ausgewählt wird.

Die count Funktion gibt auch die Zahl vier zurück.
Wenn ich aber die Knoten mit einem Prädikat adressieren möchte bekomme ich nur bei "[1]" ein Ergebniss.

Offensichtlich erfolgt die Umwandlung *vor* der Einschränkung durch ein Prädikat, was ich auch nicht ganz einleuchtend finde, aber es ist so. Möglich wäre ja auch die Auswahl aller <nachname>-Knoten, dann das Filtern des ersten bzw. zweiten Knoten und dann die Umwandlung in einen String

Eine Lösung ohne Variablen wäre auch:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:template match="/">
    <html>
      <head>
        <title>Test</title>
      </head>
      <body>
        <p><b>Anzahl gesammt:<xsl:value-of select="count (.//nachname)"/></b></p>
        <xsl:apply-templates select="//nachname"/>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="//nachname">
    <p><xsl:value-of select ="." /></p>
  </xsl:template>
  </xsl:stylesheet>

Gruß
Franz