Hallo,
<xsl:variable name="countlines" select="string-length(//text()) - string-length(translate(//text(),'
',''))">
ich will den gesamten Inhalt des Elements <block> mit allen Nachfahren innerhalb der <block>-Elemente kopieren, damit ich anschließend die Zeilen auszählen kann und den Wert, der in der Variable steht, anschließend weiter verwenden kann. Ist der Gedanke falsch?
Jain, er ist flasch, weil du dazu nicht das Element zu kopieren brauchst (darfst).
Das "/" berücksichtigt doch die gesamte Zeichenzahl!?!
Nein, das "/" selektiert das 'document root' (nicht zu verwechseln mit dem Root- oder Wurzelelements).
D.h. auf den kopierten Inhalt kannst du damit nicht zugreifen, würdest du das versuchen, würdest du unter XSLt 1.0 einen Fehler bekommen, weil da keine temporäre Bäume (was der in die Variable kopierter Inhalt ist) verwendet werden können.
Zweitens, du hast zwar - unabhängig davon, was du in die variable kopiert hast - auf den Inhalt von <block> zugegriffen, aber als ergebnis, steht dann nicht nur eine Zahl in der Variable ($countlines) sondern auch der gesamter Textinahlt von <bock> (weil du es ja hineinkopiert hast).
Bei deinem Beispiel zu bleiben, du kannst natürlich auch "/" verwenden:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:variable name="countlines" select="string-length(/) - string-length(translate(/,'
',''))" />
<xsl:template match="/">
<xsl:value-of select="$countlines" />
</xsl:template>
</xsl:stylesheet>
Grüße
Thomas