josteinaj Skrevet 19. oktober 2009 Del Skrevet 19. oktober 2009 Jeg har en struktur som dette: <level1> <h1>Tittel</h1> <p>tekst</p> <p>tekst</p> <h2>Undertittel</h2> <p>tekst</p> <pagenum id="page2"/> <p>tekst</p> <h2>Undertittel</h2> <p>tekst</p> <p>tekst</p> </level1> ... og trenger vha. XSL å få pakket inn under-seksjonene som dette: <level1> <h1>Tittel</h1> <p>tekst</p> <p>tekst</p> <level2> <h2>Undertittel</h2> <p>tekst</p> <pagenum id="page2"/> <p>tekst</p> </level2> <level2> <h2>Undertittel</h2> <p>tekst</p> <p>tekst</p> </level2> </level1> Altså; alt mellom to <h2>'er, eller mellom en <h2> og en </level1>, skal pakkes inn i en <level2>. (Jeg trenger tilsvarende for h3, h4 etc. også men det regner jeg med blir bare copy/paste av dette) Hvordan får jeg til dette? Lenke til kommentar
josteinaj Skrevet 20. oktober 2009 Forfatter Del Skrevet 20. oktober 2009 Jeg har funnet en løsning. Dette er fra xsl-list at lists.mulberrytech.com : <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mf="http://example.com/2009/mf" exclude-result-prefixes="xs mf"> <xsl:output indent="yes"/> <xsl:strip-space elements="*"/> <xsl:function name="mf:group" as="node()*"> <xsl:param name="nodes" as="node()*"/> <xsl:param name="level" as="xs:integer"/> <xsl:for-each-group select="$nodes" group-starting-with="headline[@level = $level]"> <xsl:choose> <xsl:when test="self::headline[@level = $level]"> <xsl:element name="level{$level}"> <xsl:element name="h{$level}"> <xsl:value-of select="."/> </xsl:element> <xsl:sequence select="mf:group(current-group() except ., $level + 1)"/> </xsl:element> </xsl:when> <xsl:otherwise> <xsl:copy-of select="current-group()"/> </xsl:otherwise> </xsl:choose> </xsl:for-each-group> </xsl:function> <xsl:template match="document"> <xsl:variable name="v1"> <headline level="1"><xsl:value-of select="metaData/title"/></headline> <xsl:copy-of select="contentSection/node()"/> </xsl:variable> <body> <xsl:sequence select="mf:group($v1/node(), 1)"/> </body> </xsl:template> </xsl:stylesheet> Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå