Je souhaite obtenir le premier en-tête (h1) avant une table dans un docx.XSLT: recherche du premier élément au-dessus de l'élément sélectionné
Je peux obtenir toutes les rubriques avec:
<xsl:template match="w:p[w:pPr/w:pStyle[@w:val='berschrift1']]">
<p>
<context>
<xsl:value-of select="." />
</context>
</p>
</xsl:template>
et je peux aussi obtenir toutes les tables
<xsl:template match="w:tbl">
<p>
<table>
<xsl:value-of select="." />
</table>
</p>
</xsl:template>
Mais unfortunetly le processeur n'accepte pas
<xsl:template match="w:tbl/preceding-sibling::w:p[w:pPr/w:pStyle[@w:val='berschrift1']]">
<p>
<table>
<xsl:value-of select="." />
</table>
</p>
</xsl:template>
Voici un réduit Fichier XML extrait d'un docx: http://pastebin.com/KbUyzRVv Je veux quelque chose lik e en conséquence:
<context>Let’s get it on</context> <- my heading
<table>data</table>
<context>Let’s get it on</context> <- my heading
<table>data</table>
<context>We’re in the middle of something</context> <- my heading
<table>data</table>
Grâce à Daniel Haley, j'ai pu trouver une solution à ce problème. Je l'afficherai ici, donc il est indépendant du pastebin que je postet ci-dessous.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:v="urn:schemas-microsoft-com:vml" exclude-result-prefixes="xsl w v">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="w:tbl">
<context>
<xsl:value-of select="(preceding-sibling::w:p[w:pPr/w:pStyle[@w:val = 'berschrift1']])[last()]"/>
</context>
<table>
<xsl:value-of select="."/>
</table>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
toujours indiquer si vous pouvez profiter de XSLT 2.0. –
Désolé, c'est ma première approche pour faire quelque chose avec XSLT. C'est aussi un prototype, donc je pense que tant qu'il y a des processeurs non commerciaux, la version n'a pas d'importance. – froehli