Subject: [xsl] Muenchian Method Doesn't go far enough for me From: "Richard Lander" <rlander@xxxxxxxxxxxxx> Date: Wed, 16 Oct 2002 17:15:09 -0700 |
Afternoon, I'm having some trouble with grouping. I've moved to the Muenchian method, which makes good sense to me. A similar problem to mine would be writing a transform to convert flat HTML sections to hiearchical sections. In HTML, you might have: H1 H2 H2 H3 H2 H1 H2 Let's remap it to: <test> <section> <title>H1</title> </section> <section> <title>H2</title> </section> <section> <title>H2</title> </section> <section> <title>H3</title> </section> <section> <title>H2</title> </section> <section> <title>H1</title> </section> <section> <title>H2</title> </section> </test> You would want to convert to the following sectioning structure: <test> <section> <title>H1</title> <section> <title>H2</title> </section> <section> <title>H2</title> <section> <title>H3</title> </section </section> <section> <title>H2</title> </section </section> <section> <title>H1</title> <section> <title>H2</title> </section> </section> </test> I've mapped my current solution, which I'd like to improve on, to this problem set. Here goes: C:\temp\XSLTProject2-> - type XSLTProject2_data.xml <test> <section> <title>H1</title> </section> <section> <title>H2</title> </section> <section> <title>H2</title> </section> <section> <title>H3</title> </section> <section> <title>H2</title> </section> <section> <title>H1</title> </section> <section> <title>H2</title> </section> </test> C:\temp\XSLTProject2-> - type XSLTProject2.xslt <?xml version="1.0"?> <xslt:transform xmlns:xslt="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xslt:key name="sections" match="section" use="title"/> <xslt:template match="/"> <xslt:apply-templates/> </xslt:template> <xslt:template match="test"> <test> <xslt:apply-templates select="key('sections','H1')"/> </test> </xslt:template> <xslt:template match="section"> <xslt:variable name="baseName" select="'H'"/> <xslt:variable name="currentHeading" select="title"/> <xslt:variable name="childHeading"> <xslt:value-of select="$baseName"/> <xslt:value-of select="substring-after(title,$baseName) + 1"/> </xslt:variable> <section> <title><xslt:value-of select="title"/></title> <xslt:apply-templates select="key('sections',$childHeading)[generate-id(current()) = generate-id(preceding-sibling::section[title = $currentHeading][1])]"/> </section> </xslt:template> </xslt:transform> C:\temp\XSLTProject2-> - type out.xml <?xml version="1.0" encoding="utf-8" ?> <test> <section> <title>H1</title> <section> <title>H2</title> </section> <section> <title>H2</title> <section> <title>H3</title> </section> </section> <section> <title>H2</title> </section> </section> <section> <title>H1</title> <section> <title>H2</title> </section> </section> </test> Anyway, so my transform works ... However, I'm sure that the following isn't very efficient: <xslt:apply-templates select="key('sections',$childHeading)[generate-id(current()) = generate-id(preceding-sibling::section[title = $currentHeading][1])]"/> Is there anyway to improve on this and still achieve the same result tree? Thanks, Rich XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Grouping and converting by at, Ronan Phelan | Thread | Re: [xsl] Muenchian Method Doesn't , G. Ken Holman |
[xsl] Grouping and converting by at, Ronan Phelan | Date | [xsl] Usage of transformNodeToObjec, Nirmala R |
Month |