Subject: RE: [xsl] Cleaning text away from context position ... From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 28 Jul 2005 11:39:19 +0100 |
I'd suggest instead of using position() to get the position of an element, use <xsl:number/>. You could in fact use <xsl:number level="multiple" count="*" format="1,1"/> to get the whole value... Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Soren Kuula [mailto:dongfang@xxxxxxxxxxx] > Sent: 28 July 2005 10:39 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Cleaning text away from context position ... > > Hi, > > I'm toying with a stylesheet that copies an XML document .. > and adds an > attribute named id: > > For the root element, id is 1 > For some other element, id is that of the parent, plus ',' plus the > child cardinality of the element (so first child of the root is 1,1, > second child of the root is 1,2, second child of third child > of the root > is 1,3,2 etc). > > Something like: > <?xml version='1.0'?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:template match="*|@*|comment()|processing-instruction()"> > <xsl:param name="id" select="''"/> > <xsl:param name="sep" select="''"/> > <xsl:variable name="qid" select="concat($id, $sep, position())"/> > <xsl:copy> > <xsl:attribute name="id"> > <xsl:value-of select="$qid"/> > </xsl:attribute> > <xsl:apply-templates > select="*|@*|comment()|processing-instruction()|text()"> > <xsl:with-param name="id" select="$qid"/> > <xsl:with-param name="sep" select="','"/> > </xsl:apply-templates> > </xsl:copy> > </xsl:template> > > Applying it to itself, I get > <?xml version="1.0"?> > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" id="1" > version="1.0"> > <xsl:template id="1,5" > match="*|@*|comment()|processing-instruction()"> > <xsl:param id="1,5,3" name="id" select="''"/> > <xsl:param id="1,5,5" name="sep" select="''"/> > <xsl:variable id="1,5,7" name="qid" select="concat($id, $sep, > position())"/> > <xsl:copy id="1,5,9"> > <xsl:attribute id="1,5,9,2" name="id"> > <xsl:value-of id="1,5,9,2,3" select="$qid"/> > </xsl:attribute> > <xsl:apply-templates id="1,5,9,4" > select="*|@*|comment()|processing-instruction()|text()"> > <xsl:with-param id="1,5,9,4,3" name="id" select="$qid"/> > <xsl:with-param id="1,5,9,4,5" name="sep" select="','"/> > </xsl:apply-templates> > </xsl:copy> > </xsl:template> > </xsl:stylesheet> > > - not quite what I wanted, as text nodes are included in the context > list and affect context positions. > > What to do about it? I want to preserve text nodes. Seems I > can't select > and recurse on all element nodes and all text nodes > separately (getting > a nice context list of elements only), as that would mess up > the order > of things. > > Any good ideas? Need to recurse in the sibling direction instead? > > Soren
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Cleaning text away from c, David Carlisle | Thread | [xsl] net.sf.saxon.trans.DynamicErr, Santosh N |
Re: [xsl] error in XSL file when us, David Carlisle | Date | RE: [xsl] error in XSL file when us, Michael Kay |
Month |