2017-06-15 1 views
0

J'ai un ensemble de paragraphes:Comment supprimer toutes les balises vides à la fin d'une liste à l'aide de XSLT 2.0?

<p>Paragraph 1</p> 
<p>Paragraph 2</p> 
<p/> 
<p>Paragraph 3</p> 
<p>Paragraph 4</p> 
<p/> 
<p>Paragraph 5</p> 
<p/> 
<p/> 
<p/> 

Ce que je veux supprimer les paragraphes vides à la fin de l'ensemble des balises, mais je veux garder les autres balises vides.

<p>Paragraph 1</p> 
<p>Paragraph 2</p> 
<p/> 
<p>Paragraph 3</p> 
<p>Paragraph 4</p> 
<p/> 
<p>Paragraph 5</p> 

J'ai trouvé des réponses telles que this one qui expliquent comment supprimer toutes les balises vides (ou tout autre type de balises, si cette question), mais je ne suis pas trop sûr comment supprimer juste la dernière série de balises vides une liste comme celle-ci.

À ce stade, le document ne doit inclure que des éléments <p>. Je peux les placer dans n'importe quel autre tag, j'utilise <html><body> comme balises parent.

+0

Pouvez-vous nous montrer l'élément parent des éléments 'p' et expliquer si ce parent contiendra seulement Les éléments 'p' ou ces éléments' p' peuvent-ils être mélangés avec ou précédés ou suivis par d'autres éléments? S'il n'y a pas d'autres frères et soeurs alors '' devrait faire l'affaire. –

+0

@MartinHonnen J'ai ajouté des informations à ma question. –

Répondre

1

Vérifiez ce code:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="*[not(@*|*|comment()|processing-instruction()) and normalize-space()='']"/> 
</xsl:stylesheet> 
1

En supposant que vous avez seulement p éléments comme frères et soeurs que vous pouvez ensuite utiliser <xsl:template match="p[not(node()) and not(following-sibling::p[node()])]"/> avec le modèle de transformation d'identité:

http://xsltransform.net/ehVYZMW/1 montre la feuille de style avec

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="p[not(node()) and not(following-sibling::p[node()])]"/> 
</xsl:transform> 
+0

Nice xpath, plus un. –