Subject: Re: [xsl] Grouping with keys From: "Silvia Liberto" <SLiberto@xxxxxx> Date: Thu, 9 Feb 2006 18:14:09 +0100 (MET) |
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><HTML></t> > </r> > </p> > <p> > <pPr> > <pStyle val="Programlisting"/> > </pPr> > <r> > <t> <HEAD></t> > </r> > </p> > <p> > <pPr> > <pStyle val="Programlisting"/> > </pPr> > <r> > <t> <BODY></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>
</xsl:text> > <xsl:value-of select="normalize-space(r/t)"/> > <xsl:if > test="count(following-sibling::p[pPr/pStyle[@val='Programlisting']])=0"> > <xsl:text>
</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(., '
', '')"/> > </xsl:template> > > </xsl:stylesheet> > > > ===OUTPUT:=== > <?xml version="1.0" encoding="iso-8859-1" standalone="no"?> > <wordDocument> > <title>Erste Ueberschrift</title> > <programlisting> > <HTML> > <HEAD> > <BODY> > </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> > > <HTML> > > <HEAD> > > <BODY> > > </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><HTML></t> > > > </r> > > > </p> > > > <p> > > > <pPr> > > > <pStyle val="Programlisting"/> > > > </pPr> > > > <r> > > > <t> <HEAD></t> > > > </r> > > > </p> > > > <p> > > > <pPr> > > > <pStyle val="Programlisting"/> > > > </pPr> > > > <r> > > > <t> <BODY></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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Grouping with keys, Mike Ferrando | Thread | [xsl] How to transform xml using xs, rob Jackson |
Re: [xsl] Re: sorting by maximum va, Mukul Gandhi | Date | RE: RE: [xsl] help with select, Jiang, Peiyun |
Month |