Re: [xsl] preceding sibling

Subject: Re: [xsl] preceding sibling
From: "Kaarle Kaila" <kaarle.kaila@xxxxxx>
Date: Mon, 19 Apr 2004 08:43:13 +0300
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: [xsl] 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