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

Re: Grouping with keys

Subject: Re: Grouping with keys
From: "Silvia Liberto" <SLiberto@xxxxxx>
Date: Thu, 9 Feb 2006 18:14:09 +0100 (MET)
bis key
To Mike Ferrando,

yes it works! great!
It looks like very difficult so i need time to understand it ;-), 
but thank you very much for this solution!

regards
Silvia


> Von: Mike Ferrando <mikeferrando@xxxxxxxxx>

> 
> Silvia L.,
> I was messing around with this and came up with a solution.
> 
> I probably write things different than you do. Others on this list
> would greatly simplify these templates. However, I wanted you to see
> how it works. I use for-each only in special circumstances.
> 
> Hope you like it.
> 
> Mike Ferrando
> Library Technician
> Library of Congress
> Washington, DC
> 202-707-4454
> 
> ===XML:===
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- <?mso-application progid="Word.Document"?> -->
> <wordDocument>
>   <body>
>     <sect>
>       <p>
>         <pPr>
>           <pStyle val="Heading1"/>
>         </pPr>
>         <r>
>           <t>Erste Ueberschrift</t>
>         </r>
>       </p>
>       <p>
>         <pPr>
>           <pStyle val="Programlisting"/>
>         </pPr>
>         <r>
>           <t>&lt;HTML&gt;</t>
>         </r>
>       </p>
>       <p>
>         <pPr>
>           <pStyle val="Programlisting"/>
>         </pPr>
>         <r>
>           <t> &lt;HEAD&gt;</t>
>         </r>
>       </p>  
>       <p>
>         <pPr>
>           <pStyle val="Programlisting"/>
>         </pPr>
>         <r>
>           <t> &lt;BODY&gt;</t>
>         </r>
>       </p>  
>     </sect>
>   </body>
> </wordDocument>
> 
> 
> ===XSL:===
> <?xml version="1.0" encoding="iso-8859-1"?>
> 
> <xsl:stylesheet 
>   version="1.0" 
>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
>   xmlns:saxon="http://icl.com/saxon"
>   extension-element-prefixes="saxon"
> >
> <xsl:output 
>   version="1.0" 
>   method="xml" 
>   indent="yes" 
>   encoding="iso-8859-1" 
>   omit-xml-declaration="no" 
>   standalone="no" 
>   media-type="text/xml"
> />
> 
> 
> <xsl:strip-space elements="*"/>
> 
> <xsl:param name="replace"/>
> 
> <xsl:template match="/">
>   <xsl:apply-templates select="//*[not(parent::*)]"/>
> </xsl:template>
> 
> <xsl:template match="*[not(parent::*)]">
>   <xsl:element name="{local-name()}">
>     <xsl:apply-templates select="@* | * | text() | comment()"/>
>   </xsl:element>
> </xsl:template>
> 
> <xsl:template match="p">
>   <xsl:choose>      
>     <xsl:when 
>       test="
>         pPr/pStyle[@val='Heading1']
>         | 
>         pPr/pStyle[@val='Programlisting']
>       "
>     >
>       <xsl:if test="pPr/pStyle[@val='Heading1']">
>         <title>
>           <xsl:value-of select="r/t"/>
>         </title>
>       </xsl:if>
>       <xsl:if test="pPr/pStyle[@val='Programlisting']">
>         <xsl:if 
>           test="
>             count(
>               preceding-sibling::p[pPr/pStyle[@val='Programlisting']]
>             )=0
>           "
>         >
>           <programlisting>
>             <xsl:apply-templates 
>               select="parent::*/p[pPr/pStyle[@val='Programlisting']]"
>               mode="get_it"
>             />
>           </programlisting>
>         </xsl:if>
>       </xsl:if>
>     </xsl:when>
>     <xsl:otherwise>
>     </xsl:otherwise>
>   </xsl:choose>
> </xsl:template>
> 
> <xsl:template match="p[pPr/pStyle[@val='Programlisting']]"
> mode="get_it">
>   <xsl:text>&#xA;</xsl:text>
>   <xsl:value-of select="normalize-space(r/t)"/>
>   <xsl:if
> test="count(following-sibling::p[pPr/pStyle[@val='Programlisting']])=0">
>     <xsl:text>&#xA;</xsl:text>
>   </xsl:if>
> </xsl:template>
> 
> <xsl:template match="@*">
>   <xsl:attribute name="{name()}">
>     <xsl:value-of select="."/>
>   </xsl:attribute>
> </xsl:template>
> 
> <!-- comment() | text() template -->
> <xsl:template match="comment()">
>   <xsl:copy>
>     <xsl:value-of select="."/>
>   </xsl:copy>
> </xsl:template>
> 
> <xsl:template match="text()">
>   <xsl:value-of select="translate(., '&#xA;', '')"/>
> </xsl:template>
> 
> </xsl:stylesheet>
> 
> 
> ===OUTPUT:===
> <?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
> <wordDocument>
>    <title>Erste Ueberschrift</title>
>    <programlisting>
> &lt;HTML&gt;
> &lt;HEAD&gt;
> &lt;BODY&gt;
> </programlisting>
> </wordDocument>
> 
> 
> 
> --- Silvia Liberto <SLiberto@xxxxxx> wrote:
> 
> > hello again,
> > 
> > have someone an idea for my problem?
> > i don4t know where the mistake is?
> > 
> > i have another solution, without keys, but it doesn4t works too!?
> > Maybe its a small thing!?
> > 
> > can someone give me a tip?
> > 
> > Thanks!
> > 
> > <?xml version="1.0" encoding="ISO-8859-1"?>
> > <xsl:stylesheet version="1.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> > 
> >  <xsl:template match="p">
> >  <programlisting>
> >   <xsl:call-template name="prog"/>
> >      </programlisting> 
> > </xsl:template>
> > 
> > <xsl:template match="r">
> >   <xsl:copy-of select="."/>
> > </xsl:template>
> > 
> > <xsl:template name="prog">
> > 	  
> >       <xsl:for-each  
> > select="following-sibling::p[pPr/pStyle/@val='Programlisting']">
> > 		  <xsl:value-of select="." />  
> > 	  </xsl:for-each>  
> >     		 	  
> > 
> > </xsl:template>
> > 
> > 
> > </xsl:stylesheet>
> > 
> > 
> > 
> > 
> > > Hi Wendell and all,
> > > 
> > > thanks for helping, i know what you mean when you say i should
> > try a
> > > simpler
> > > solution, but i need this key! ;-)
> > > 
> > > so i have changed my syntax on the @use attribute for
> > Programlisting.
> > > 
> > > >
> > generate-id(preceding-sibling::p[pPr/pStyle/@val='Heading1'][1])
> > > 
> > > but it still doesn4t works!? i have no grouping effect?
> > > 
> > > i can4t find the reason, have you another idea?
> > 
> > the output shoud be like this:
> > 
> > <programlisting>
> > &lt;HTML&gt;
> > &lt;HEAD&gt;
> > &lt;BODY&gt;
> > </programlisting>
> > 
> > > 
> > > 
> > > <xsl:key name="prog" match="p[pPr/pStyle/@val='Programlisting']"
> > > 
> > >
> >
>
use="generate-id(preceding-sibling::p[pPr/pStyle/@val='Programlisting'][1])"/>
> > >  
> > > 
> > >  <xsl:template match="p">
> > >  <xsl:choose>			
> > > 		<xsl:when test="pPr/pStyle/@val='Heading1'">
> > > 			<title>
> > > 				<xsl:value-of select="r/t"/>
> > > 			</title>
> > > 		</xsl:when>
> > > 		<xsl:when test="pPr/pStyle/@val='Programlisting'">
> > > 	<programlisting>
> > > 			 <xsl:for-each select="key('prog',generate-id())">
> > > 				<xsl:value-of select="r/t"/>
> > > 			 </xsl:for-each>	 
> > > 		</programlisting>
> > > 		</xsl:when>
> > > </xsl:choose>
> > > 
> > > 
> > > </xsl:template>
> > > 
> > > </xsl:stylesheet>
> > > 
> > > 
> > > 
> > > XML:
> > > 
> > > <?xml version="1.0" encoding="UTF-8"?>
> > > <!--<?mso-application progid="Word.Document"?>-->
> > > <wordDocument>
> > > 	<body>
> > > 		<sect>
> > > 			<p>
> > > 				<pPr>
> > > 					<pStyle val="Heading1"/>
> > > 				</pPr>
> > > 				<r>
> > > 					<t>Erste Ueberschrift</t>
> > > 				</r>
> > > 			</p>
> > > 			<p>
> > > 				<pPr>
> > > 					<pStyle val="Programlisting"/>
> > > 				</pPr>
> > > 				<r>
> > > 					<t>&lt;HTML&gt;</t>
> > > 				</r>
> > > 			</p>
> > > 			<p>
> > > 				<pPr>
> > > 					<pStyle val="Programlisting"/>
> > > 				</pPr>
> > > 				<r>
> > > 					<t> &lt;HEAD&gt;</t>
> > > 				</r>
> > > 			</p>	
> > > 			<p>
> > > 				<pPr>
> > > 					<pStyle val="Programlisting"/>
> > > 				</pPr>
> > > 				<r>
> > > 					<t> &lt;BODY&gt;</t>
> > > 				</r>
> > > 			</p>	
> > > 		</sect>
> > > 	</body>
> > > </wordDocument>
> > > 
> > > 
> > > 
> > > 
> > > -- 
> > > Telefonieren Sie schon oder sparen Sie noch?
> > > NEU: GMX Phone_Flat http://www.gmx.net/de/go/telefonie
> > > 
> > 
> > -- 
> > DSL-Aktion wegen gro_er Nachfrage bis 28.2.2006 verldngert:
> > GMX DSL-Flatrate 1 Jahr kostenlos* http://www.gmx.net/de/go/dsl
> > 
> > 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com 
> 

-- 
DSL-Aktion wegen gro_er Nachfrage bis 28.2.2006 verldngert:
GMX DSL-Flatrate 1 Jahr kostenlos* http://www.gmx.net/de/go/dsl

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.