RE: [xsl] rendering marginal XML

Subject: RE: [xsl] rendering marginal XML
From: "McNally, David" <David.McNally@xxxxxxxxxx>
Date: Fri, 26 Oct 2001 16:09:26 -0400
> > <msgSent>
> > 	<time>time sent</time>
> > 	<origin>me@xxxxxxxx</origin>
> > 	<r>you@xxxxxxxxx</r>
> > 	<recieved>time recieved</recieved>
> > 	<status>Any error messages, etc</status>
> > 	<r>you2@xxxxxxxxx</r>
> > 	<recieved>time recieved</recieved>
> > 	<status>Any error messages, etc</status>
> > 	(this repeats for each recipient)
> > </msgSent>
> > (this repeats for each message)
> >
> > The problem is the <recieved> and <status> tags refer to the
> > imediately preceding <r> tag.
> 
> If the structure is sufficiently regular you can add the necessary
> <recipient> element by doing
> 
> <xsl:template match="r">
>   <recipient>
>   <name><xsl:value-of select="."/></name>
>   <received><xsl:value-of
> select="following-sibling::recieved[1]"/></received>
>   <status><xsl:value-of 
> select="following-sibling::status[1]"/></status>
>   </recipient>
> </xsl:template>
> 

Or, to deal with missing Status elements:

<xsl:template match="r">
 <xsl:if test="string(following-sibling::*[2]/self::*[name(.)='status'])">
  <recipient>
  <name><xsl:value-of select="."/></name>
  <received><xsl:value-of
select="following-sibling::recieved[1]"/></received>
  <status><xsl:value-of select="following-sibling::status[1]"/></status>
  </recipient>
 </xsl:if>
</xsl:template>

David.
--
David McNally
Software Engineer
Moody's Investors Service

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread