FWIW, Saxon has an extension function saxon:line-number() that gives the
line number of the context node in the source document (provided you run
Saxon with the -l option).
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
S Woodside
Sent: 22 January 2003 05:26
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] debugging source line numbers
The FAQ is pretty thin on debugging tips, so I thought I'd
share this
that I came up with. the gurus on the list can probably improve it ;-)
I wanted to include a line number in the output that would take me to
the line in the source XML that is being processed. It's
tricky because
the processor doesn't count close tags in the various number/count
functions, but I came up with this xslt. In order to make it work you
have to "pretty-print" your source document (like in BBEdit,
format as
"hierarchical") to have one node / tag text per line. This
trick puts
me within about +/- 20 lines of the right line, in my 2000
line source
file.
<xsl:text>{{{</xsl:text>
<xsl:value-of select="(count(preceding::* | ancestor::*) *
2 * 9 div
10 + 1" />
<xsl:text>}}}</xsl:text>
I multiply the result of the count by 2 because every node
has a close
tag, thus doubling the number of lines. Except for the nodes
that don't
have close tags, so I multiply by a "constant" that should be roughly
the ratio of nodes with close tags to nodes w/o close tags,
9/10 seemed
to work after fiddling. I can't remember what the +1 does ;-)
simon
---
www.simonwoodside.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list