| Subject: Re: [xsl] Processing IDREFS attributes From: JBryant@xxxxxxxxx Date: Tue, 1 Nov 2005 15:46:10 -0600 | 
Hi, Dan,
Assuming that "Location", "Party", and "Organization" are three different 
locations in your source file, you'll need either a recursive template (if 
you use XSLT 1.0) or the tokenize function (if you use XSLT 2.0).
If you do need a recursive template, it's a pretty simple one in this 
case:
<xsl:template name="process-ids">
  <xsl:param name="in-string"/>
  <xsl:choose>
    <xsl:when test="contains($in-string, ' ')">
      <!-- process an id here; substring-before($in-string, ' ') gets the 
id string to process-->
      <xsl:call-template name="process-ids">
        <xsl:with-param name="in-string" 
select="substring-after($in-string, ' ')"/>
      <xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <!-- process the last id here -->
    <xsl:otherwise>
  </xsl:choose>
</xsl:template>
You'd call it with
<xsl:call-template name="process-ids">
  <xsl:with-param name="in-string" select="@parameters"/>
</xsl:call-template>
The XSLT 2.0 tokenize function is much less verbose:
<xsl:for-each select="tokenize(@references, ' ')">
  <!-- process each id here; . gets the id string -->
</xsl:for-each>
That's one of the reasons I like XSLT 2.0.
Jay Bryant
Bryant Communication Services
(presently consulting at Synergistic Solution Technologies)
Dan Vint <dvint@xxxxxxxxx> 
11/01/2005 03:00 PM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc
Subject
[xsl] Processing IDREFS attributes
I've got a few places where I have an attribute of type IDREFS and a 
sequence of ID values like references="Location Party Organization". I had 
thought a simple for-each loop would pull these apart with the id() 
function, in something like this:
<xsl:for-each select="id(@references)">
                 <xsl:value-of select="."/>
</xsl:for-each>
But it doesn't work. What I get is the content of @references with the 
above.
The only other solution I have thought about is creating a template and 
recursively pulling apart the string. This should work, but I would think 
there is a simpler way to make this work. Is there a solution I missed?
..dan
---------------------------------------------------------------------------
Danny Vint
Specializing in Panoramic Images of California and the West
http://www.dvint.com
voice: 510-522-4703
When H.H. Bennett was asked why he preferred to be out
shooting landscapes rather than spending time in his portrait studio:
"It is easier to pose nature and less trouble to please."
http://www.portalwisconsin.org/bennett_feature.cfm
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| [xsl] Processing IDREFS attributes, Dan Vint | Thread | Re: [xsl] Processing IDREFS attribu, Dan Vint | 
| Re: [xsl] Default namespace in XML , Jon Gorman | Date | Re: [xsl] Default namespace in XML , drkm | 
| Month |