xsl-list
[Top] [All Lists]

Re: debugging source line numbers

2003-01-21 22:51:47
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


=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL


"S Woodside" <sbwoodside(_at_)yahoo(_dot_)com> wrote in message
news:FD40E2C0-2DC9-11D7-86C5-000393414368(_at_)yahoo(_dot_)com(_dot_)(_dot_)(_dot_)
  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


__________________________________________________
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



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