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

RE: I only want to process the first node... ;)

Subject: RE: I only want to process the first node... ;)
From: "Geert Josten" <geert.josten@xxxxxxxxxxx>
Date: Tue, 18 Sep 2007 23:10:33 +0200
RE:  I only want to process the first node... ;)
Hi Norman,

Add a root template that only applies templates on the direct S child nodes of
Analysis and on each first descendant S within each non-S direct child of
Analysis. Something like:

<xsl:template match="/">
	<xsl:apply-templates select="Analysis/S | Analysis/*//S[1]" />
</xsl:template>

Note: the union sort the S element to document order, and the [1] predicate
does not result in just one S descendant (at least, that is the intention)

Kind regards,
Geert

>


Drs. G.P.H. Josten
Consultant



Daidalos BV
Source of Innovation
Hoekeindsehof 1-4
2665  JZ  Bleiswijk
Tel.: +31 (0) 10 850 1200
Fax: +31 (0) 10 850 1199
www.daidalos.nl
KvK 27164984


De informatie - verzonden in of met dit emailbericht - is afkomstig van
Daidalos BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit
bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan dit
bericht kunnen geen rechten worden ontleend.


> From: Norman Rosner [mailto:jeckyll@xxxxxxx]
> Sent: dinsdag 18 september 2007 18:14
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  I only want to process the first node... ;)
>
> Hi there!
>
> I have an XML File that looks like this:
>
>
> > <Analysis>
> >
> > .....
> > <S>
> >       <PPER id="s33_5" word="er" lemma="er" morph="3.Nom.Sg.Masc"
> > trans="he"/>
> >       <VVFIN id="s33_4" word="verlange" lemma="verlangen"
> > morph="3.Sg.Pres.Subj"
> >              trans="request"/>
> >       <NP>
> >          <PP>
> > 	           <APPR id="s33_6" word="vor" lemma="vor" morph="--"
> > trans="over"/>
> > 	           <PIS id="s33_7" word="allem" lemma="alle"
> > morph="Dat.Sg.Masc" trans="all"/>
> >          </PP>
> >          <CNP>
> > 	           <NN id="s33_8" word="Arbeitsmoral"
> lemma="Arbeitsmoral"
> > morph="Acc.Sg.Fem"
> >                 trans="employee moral"/>
> > 	           <KON id="s33_9" word="und" lemma="und" morph="--"
> > trans="and"/>
> > 	           <NP>
> > 	              <ADJA id="s33_10" word="ordentliches"
> > lemma="ordentlich" morph="Pos.Acc.Sg.Neut"
> >                      trans="proper"/>
> > 	              <NN id="s33_11" word="Auftreten"
> lemma="auftreten"
> > morph="Acc.Sg.Neut"
> >                    trans="appearence"/>
> > 	           </NP>
> >          </CNP>
> >       </NP>
> >       <PP>
> >          <APPR id="s33_1" word="Von" lemma="von" morph="--"
> > trans="of | from"/>
> >          <PPOSAT id="s33_2" word="seinen" lemma="sein"
> > morph="Dat.Pl.*" trans="her"/>
> >          <NN id="s33_3" word="Beschdftigten" lemma="beschdftigter"
> > morph="Dat.Pl.*"
> >              trans="employees"/>
> >       </PP>
> >   </S>
> >   <DL>
> >       <CS>
> >          <S>
> > 	           <NE id="s34_1" word="Perot" lemma="Perot"
> > morph="Nom.Sg.Masc" trans="Perot"/>
> > 	           <VAFIN id="s34_2" word="sei" lemma="sein"
> > morph="3.Sg.Pres.Subj" trans="would be"/>
> > 	           <NP>
> > 	              <ART id="s34_3" word="ein" lemma="ein"
> > morph="Nom.Sg.Masc" trans="an"/>
> > 	              <ADJA id="s34_4" word="autoritdrer"
> > lemma="autoritdr" morph="Pos.Nom.Sg.Masc"
> >                      trans="authoritarian"/>
> > 	              <NN id="s34_5" word="Macher" lemma="Macher"
> > morph="Nom.Sg.Masc" trans="wright"/>
> > 	           </NP>
> >          </S>
> >          <KON id="s34_7" word="und" lemma="und" morph="--"
> > trans="and"/>
> >          <S>
> > 	           <NP>
> > 	              <PPOSAT id="s34_11" word="seine" lemma="sein"
> > morph="Nom.Sg.Fem" trans="her"/>
> > 	              <NN id="s34_12" word="Schwdche" lemma="Schwdche"
> > morph="Nom.Sg.Fem"
> >                    trans="weakness"/>
> > 	           </NP>
> > 	           <VAFIN id="s34_9" word="sei" lemma="sein"
> > morph="3.Sg.Pres.Subj" trans="would be"/>
> > 	           <ADV id="s34_10" word="auch" lemma="auch"
> morph="--"
> > trans="too"/>
> >          </S>
> >       </CS>
> >       <S>
> >          <NP>
> > 	           <ART id="s34_16" word="ein" lemma="ein"
> > morph="Nom.Sg.Masc" trans="a"/>
> > 	           <NN id="s34_17" word="Manager" lemma="Manager"
> > morph="Nom.Sg.Masc" trans="manager"/>
> >          </NP>
> >          <VVFIN id="s34_14" word="beschreibt" lemma="beschreiben"
> > morph="3.Sg.Pres.Ind"
> >                 trans="describes"/>
> >          <PPER id="s34_15" word="ihn" lemma="ihn"
> > morph="3.Acc.Sg.Masc" trans="him"/>
> >       </S>
> >   </DL>
> > </Analysis>
>
> So there's an Analysis node and several S nodes as siblings.
> But there are also CS and DL nodes as siblings of the
> Analysis node. What i want is: Capitalize the first character
> of every @trans that occurs first in a S node and just print
> the rest @trans as strings to sdtout ;)
>
> So thats what i wrote:
>
> > <?xml version="1.0" encoding="utf-8"?>
> >
> > <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/
> > Transform"
> > 		xmlns:xlink="http://www.w3.org/1999/xlink"
> > 		xmlns:mt="machine_translation"
> > 		xmlns:xml="http://www.w3.org/XML/1998/namespace">
> >
> >   <xsl:output method="text" omit-xml-declaration="yes"
> > standalone="yes" indent="no"/>
> >
> >   <xsl:strip-space elements="*"/>
> >
> >
> > <!-- Capitalize the first character of a given word -->
> >   <xsl:function name="mt:capitalize_first">
> >     <xsl:param name="word"/>
> >     <xsl:variable name="converted_first_char" select="translate
> > (substring($word,1,1),'abcdefghijklmnopqrstuvwxyz',
> > 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
> >     <xsl:value-of select="concat($converted_first_char, substring
> > ($word, 2, string-length($word)))"/>
> >   </xsl:function>
> >
> >   <xsl:template match="S">
> >
> >     <xsl:variable name="terminals" select="descendant::*[count
> > (child::*) = 0]"/>
> >
> >     <xsl:value-of
> select="mt:capitalize_first($terminals[1]/@trans)"/>
> >
> >     <xsl:for-each select="$terminals[position() != 1]/@trans">
> >       <xsl:text> </xsl:text>
> >       <xsl:value-of select="."/>
> >     </xsl:for-each>
> >
> >     <xsl:text>&#xa;</xsl:text>
> >
> >
> >   </xsl:template>
> > </xsl:stylesheet>
>
>    But then i recognized that some S nodes can occur in a CS
> or DL nodes, so i changed my XPath expression (descendant::*[count
> (child::*) = 0]) to tis one: ((ancestor::*)[2])/descendant::*[count
> (child::*) = 0] just to test if it works when i take the
> ancestor node that comes directly after the Analysis node. It
> works fine but the fact is that i get the strings printed 2
> or three times. In the example above it is:
>
> > Perot would be an authoritarian wright and her weakness
> would be too a
> > manager describes him Perot would be an authoritarian
> wright and her
> > weakness would be too a manager describes him Perot would be an
> > authoritarian wright and her weakness would be too a
> manager describes
> > him
>
>
> So i know why it is printed or processed three times: There a
> three S nodes inside the DL node. And here's the point: If i
> processed the first S node inside a DL or CS node i don't
> want to process the following S nodes in that CS or DL node.
>
> I hope that somebody of you can help me and that somebody of
> you understand the problem :)
>
> Thanks in advance
>
> norman

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.