2010-03-19 5 views
3

J'ai une page HTML (entièrement valide) qui est post-traitée par XSLT.Utilisation de XSLT pour traiter une page HTML et déplacer un DIV d'un endroit à un autre

Disons que la section pertinente du code ressemble à ceci:

<div id="content"> ... </div> 
... 
<div id="announcement"> ... </div> 

Le XSLT doit transformer pour ressembler à ceci:

<div id="content"> <div id="announcement"> ... </div> ... </div> 

Toutes les idées? Je suis coincé.

Édition: Indique que <div id="content"> et <div id="announcement"> sont séparés par un autre code.

+0

Votre page HTML est-elle une page XHTML? –

+0

C'est un code HTML valide, donc oui. –

+0

Tout le HTML valide n'est pas XHTML valide. Quelle est la DTD en haut du document? –

Répondre

2

Si le announcement div suit directement lacontent div, utilisez:

<xsl:template match="div[@id='content' and following-sibling::div[1][@id='announcement']"> 
    <!-- copy the content div and its attributes --> 
    <xsl:copy> 
    <xsl:copy-of select="@*" /> 
    <!-- now make a copy of the directly following announcement div --> 
    <xsl:copy-of select="following-sibling::div[1][@id='announcement']" /> 
    <!-- process the rest of the contents --> 
    <xsl:apply-templates /> 
    </xsl:copy> 
</xsl:template> 

<!-- the empty template mutes an announcement div that follows a content div --> 
<xsl:template match="div[@id='announcement' and preceding-sibling::div[1][@id='content']" /> 

Ce qui précède est assez précis de ne pas toucher d'autres divs qui pourraient être dans votre document. Si votre situation le permet, vous pouvez le rendre plus simple/moins spécifique pour augmenter la lisibilité.

+0

Malheureusement, il ne suit pas directement le contenu div; cependant, il devrait toujours être au même endroit (par rapport au contenu div). Peut-être que je peux modifier votre code suggéré? Je vous remercie! –

+0

@Dave: Bien sûr, ne devrait pas être trop difficile. Le code que j'ai fourni prend la première div suivante s'il a l'identifiant "annonce". Vous pouvez l'inverser 'following-sibling :: div [@ id = 'announcement'] [1]' ou travailler avec l'axe 'following ::' et voir où cela vous mène. – Tomalak

Questions connexes