josteinaj Skrevet 19. oktober 2009 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?
josteinaj Skrevet 20. oktober 2009 Forfatter 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>
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å