Re: [xsl] Processing IDREFS attributes

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