Subject: RE: [xsl] generating ID strings that are both readable and unique From: "Trevor Nicholls" <trevor@xxxxxxxxxxxxxxxxxx> Date: Tue, 14 Oct 2008 22:11:58 +1300 |
David It isn't available in XSL 1 because the key is constructed from the 'use' expression and a more complex either-or-or- construction is only possible in XSL 2. You've got the solution I was trying to work towards which deals with potential duplicated section titles. But what it doesn't deal with is sections which already have id attributes defined. True, it avoids generating a new id for these sections, but it doesn't detect the situation where the id attached to one of these sections happens to duplicate the new id that this code will generate for one of the other sections. That's why it appears to me that I need a more complex key. I am unable to modify id's that have already been defined - these id's exist because the documents already contain a certain number of cross references. The stylesheet runs in the middle of Frame's save dialog. Aborting the transform with a duplicate id would be a catastrophe. Cheers Trevor -----Original Message----- From: David Carlisle [mailto:davidc@xxxxxxxxx] Sent: Tuesday, 14 October 2008 9:59 p.m. To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] generating ID strings that are both readable and unique me> > However this mechanism isn't possible in XSL 1.0 me> me> why not? something like the following. You'd need to fine tune the set of characters made safe (this makes spaces into _ and discards !#,( but lets anything else through, and doesn't take care to avoid digits etc being at the front of the id but all those are probably fixable in practice. David <x> <section><title>Introduction with spaces!</title>...</section> ... <section id="examples"><title>Examples</title>...</section> <section><title>Examples</title>...</section> ... <section><title>Introduction with spaces!</title>...</section> <section id="foo"><title>og jhl</title>...</section> <section><title>og jhl</title>...</section> <section><title>og jhl</title>...</section> ... </x> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="node()"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:key name="noid" match="section[not(@id)]" use="translate(title,' !#,()','_')"/> <xsl:template match="section[not(@id)]"> <xsl:copy> <xsl:variable name="id" select="translate(title,' !#._,()','_')"/> <xsl:variable name="thisnode" select="generate-id()"/> <xsl:attribute name="id"> <xsl:value-of select="$id"/> <xsl:for-each select="key('noid',$id)"> <xsl:if test="position()!=1 and generate-id(.)=$thisnode"> <xsl:text>-</xsl:text> <xsl:value-of select="position()"/> </xsl:if> </xsl:for-each> </xsl:attribute> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> </xsl:stylesheet> $ saxon ids.xml ids.xsl <?xml version="1.0" encoding="utf-8"?><x> <section id="Introduction_with_spaces"><title>Introduction with spaces!</title>...</section> ... <section id="examples"><title>Examples</title>...</section> <section id="Examples"><title>Examples</title>...</section> ... <section id="Introduction_with_spaces-2"><title>Introduction with spaces!</title>...</section> <section id="foo"><title>og jhl</title>...</section> <section id="og_jhl"><title>og jhl</title>...</section> <section id="og_jhl-2"><title>og jhl</title>...</section> ... </x> ________________________________________________________________________ The Numerical Algorithms Group Ltd is a company registered in England and Wales with company number 1249803. The registered office is: Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom. This e-mail has been scanned for all viruses by Star. The service is powered by MessageLabs. ________________________________________________________________________
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] generating ID strings tha, David Carlisle | Thread | Re: [xsl] generating ID strings tha, David Carlisle |
Re: [xsl] generating ID strings tha, David Carlisle | Date | Re: [xsl] generating ID strings tha, David Carlisle |
Month |