xsl-list
[Top] [All Lists]

RE: debugging source line numbers

2003-01-24 01:45:23
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



<Prev in Thread] Current Thread [Next in Thread>