[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: preceding sibling

Subject: Re: preceding sibling
From: Mukul Gandhi <mukulgandhi2003@xxxxxxxxxxx>
Date: Tue, 20 Apr 2004 03:21:35 +0100 (BST)
xslt previous sibling
Hi Kaarle,

You could use the node-set function to solve the
problem.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan"
exclude-result-prefixes="xalan">

<xsl:output method="text" version="1.0"
encoding="UTF-8" indent="yes"/>

<xsl:template match="/person">
  <xsl:variable name="rtf">
    <person>
	<xsl:for-each select="notices/notice[@tag = 'NAME']">
	  <xsl:copy-of select="name"/>
	</xsl:for-each>
    </person>
  </xsl:variable>
		
  <xsl:for-each
select="xalan:nodeset($rtf)/person/name">
   <xsl:if test="givenname =
preceding-sibling::name[1]/givenname">
     <xsl:value-of select="surname"/>
   </xsl:if>
   <xsl:if test="not(givenname =
preceding-sibling::name[1]/givenname)">
     <xsl:value-of select="givenname"/>
     <xsl:value-of select="surname"/>
   </xsl:if>
  </xsl:for-each>

</xsl:template>
	
</xsl:stylesheet>

Regards,
Mukul

 --- Kaarle Kaila <kaarle.kaila@xxxxxx> wrote: > Thank
you Andreas for you suggestion.
> 
> >If I interpret correctly, the expression you are
> looking for is something
> like:
>
>test="preceding::notice[@tag='NAME'][1]/name/givenname[.=current()]"
> >This will be true when the immediately preceding
> notice node with an @tag
> >equal to 'NAME' has a name/givenname child equal to
> the current node.
> 
> I tried this but it compared to names too far back.
> The comparision should
> be made only to name/givenname elements withing
> notice[@tag='NAME'] elements
> whithin a person element.
> 
> The suggestion you gave compared also with a name of
> the previous person and
> that should be avoided. As answer to Mukul's
> question :
> 
> The <person> can contain <name> or <notices> and
> <notices> contains <notice>
> tags and <notice> tags can contain <name>:s. There
> is always a <person> tag
> as a parent to any <name> or <notices>
> 
> I have started to write an XML Schema to describe
> the structure and I stored
> the current version at
>
http://www.kk-software.fi/v20/pikaopas/html/raport.xsd
> 
> I would be greatfull for some advice here. I have
> tried to understand the
> XPath syntax both using the recommendation at 
> www.w3c.org and Michael Kays
> book but both are rather difficult to read.
> 
> regards
> Kaarle
> 
> --
> Kaarle Kaila
> email: kaarle dot kaila at iki dot fi
> www.iki.fi/kaila
> 
> ----- Original Message ----- 
> From: "Mukul Gandhi" <mukulgandhi2003@xxxxxxxxxxx>
> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> Sent: Sunday, April 18, 2004 1:58 PM
> Subject: Re:  preceding sibling
> 
> 
> > Hi Kaarle,
> >   Can you please explain the XML structure? How
> does a
> > <notice> tag relate to the previous and next
> <notice>
> > tag? Is there some grouping?
> >
> > In one <notice> tag, you have'nt mentioned
> tag="NAME"
> > -
> >
> > <notice>
> >   <name>
> >     <givenname>Lena</givenname>
> >     <surname>Karamazina</surname>
> >   </name>
> > </notice>
> >
> > Regards,
> > Mukul
> >
> >  --- Kaarle Kaila <kaarle.kaila@xxxxxx> wrote: >
> My
> > XML file contains data like this:
> > >
> > > <person sex="F">
> > > <name>
> > > <givenname>Lena</givenname>
> > > <surname>Karamazina</surname>
> > > </name>
> > >
> > > <notices>
> > > <notice tag="NAME">
> > > <name>
> > > <givenname>Lena</givenname>
> > > <surname>Koski</surname>
> > > </name>
> > > </notice>
> > >
> > > <notice tag="BIRT">
> > > <date>1944</date>
> > > <place>Tyrvdd</place>
> > > </notice>
> > > <notice>
> > > <name>
> > > <givenname>Lena</givenname>
> > > <surname>Karamazina</surname>
> > > </name>
> > > </notice>
> > >
> > > <notice tag="NAME">
> > > <name>
> > > <givenname>Lena-Lisa</givenname>
> > > <surname>Karamazina</surname>
> > > </name>
> > > </notice>
> > > </notices>
> > > </person>
> > > --------------------------------
> > > I want to print the names after each other but
> if
> > > teh givenname is same as
> > > previous one then I want to print only the
> surname.
> > >
> > > The lower part of this xsl section is OK to
> compare
> > > the name in the person
> > > but how should I compare with the givenname of
> the
> > > previous sibling in
> > > notice element with tag="NAME".
> > >
> > > Any advice would be appreciated. I am having
> some
> > > difficulties in reading
> > > the XSLT book Expressions chapter I guess.
> > >
> > >
> > >
> > > <xsl:template match="givenname">
> > >
> > >
> > > <xsl:choose>
> > > <xsl:when
> > >
> >
>
test="../../../notice::preceding-sibling[@tag='NAME']=.">
> > > <xsl:text> </xsl:text>
> > > <xsl:apply-templates/>
> > > </xsl:when>
> > >
> > > <xsl:when
> test="ancestor::person/name/givenname=.">
> > > </xsl:when>
> > > <xsl:otherwise>
> > > <xsl:text> </xsl:text>
> > > <xsl:apply-templates/>
> > > </xsl:otherwise>
> > > </xsl:choose>
> > > </xsl:template>
> > >
> > > ------------------
> > > regards
> > > Kaarle Kaila
> > > --
> > > Kaarle Kaila
> > > email: kaarle dot kaila at iki dot fi
> > > www.iki.fi/kaila
> > >
> >
> >
>
________________________________________________________________________
> > Yahoo! India Matrimony: Find your partner online.
> http://yahoo.shaadi.com/india-matrimony/

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.