"Roger Glover" <glover_roger(_at_)yahoo(_dot_)com> wrote:
Dimitre Novatchev wrote:
In case preserving of whitespace-only nodes has not been turned off
and
the xml source has "a single tag with all attributs/namespace
definitions" on a single line, then the following gives the exact
line
number:
count(preceding::text()[contains(., '
')]) + 1
This counts text nodes, not line feeds. If a text node has more than
one
line feed it will still only count as one text node in the final
result.
I think it is on the right track, but it does not quite work as
currently
written.
-- Roger Glover
glover_roger(_at_)yahoo(_dot_)com
Yes, too sleepy this morning... (:o
Here's the transformation, which does what was initially intended:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="*">
<xsl:variable name="vPrevText">
<x>
<xsl:copy-of
select="preceding::text()[contains(., '
')]"/>
<xsl:for-each select="preceding::comment()
[contains(., '
')]">
<xsl:value-of select="."/>
</xsl:for-each>
<xsl:for-each
select="preceding::processing-instruction()
[contains(., '
')]">
<xsl:value-of select="."/>
</xsl:for-each>
</x>
</xsl:variable>
<xsl:variable name="vLineNo"
select="string-length($vPrevText) + 1
-
string-length(translate($vPrevText, '
', ''))"/>
<xsl:value-of select="concat(name(),
' : line ',
$vLineNo,
'
')"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="node()[not(self::*)]"/>
</xsl:stylesheet>
It also takes care of multiline comments / processing-instructions.
When applied on this source.xml:
<root>
<item>1</item>
<!-- -->
<!--
-->
<item>5</item>
<item>3</item>
<item>2</item>
<item>6</item>
<item>4</item>
</root>
The result is:
root : line 1
item : line 2
item : line 6
item : line 7
item : line 8
item : line 9
item : line 10
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list