Le compilateur XSLT de SharePoint n’aime pas les balises HTML vides!

Le compilateur XSLT de SharePoint n’aime pas les balises HTML vides!


En travaillant sur la personnalisation visuelle des résultats de recherche depuis le composant WebPart « Search Core results« , j’ai fait face à un comportement assez étrange du compilateur XSLT de SharePoint concernant la gestion des balises HTML vides dans une feuille de styles XSL. Tout d’abord, voici l’illustration du problème:

  • Prenons par exemple un composant « Search Core WebPart » de base
  • Modifions le XSL de style associé et le template « Result » pour avoir la structure simple suivante pour l’affichage d’un résultat. J’écris volontairement un test non valide pour que mon conteneur HTML div ne contienne aucun élément:
En théorie, je devrais simplement voir le titre de chacun de mes résultats (avec un div vide en dessous) les uns en dessous des autres. Or voici ce qu’on obtient:

Illustration du problème

Hmm…pas vraiment ce à quoi je m’attendais. En observant le code source HTML voici ce qu’il se passe:

Structure HTML incorrecte

On remarque que le conteneur « srch-result-container » se comporte comme s’il n’était jamais fermé causant ainsi une imbrication de div à la façon poupées russes. Erreur CSS?? Balise(s) HTML non fermée(s) dans le XSL?? En réalité, la solution est simple: Le compilateur XSLT de SharePoint ne supporte pas les balises HTML vides et ignore la balise fermante lorsque c’est le cas!

J’ai volontairement ajouté une marge de 10 pixels au conteneur principal pour illustrer clairement le problème d’imbrication. À noter que si je n’avais pas ajouté cet attribut, visuellement, il n’y aurait eu aucune différence avec le résultat attendu (un visuel valide avec une structure HTML corrompue) ce qui rend encore plus vicieux ce comportement, car aucune erreur n’est générée par SharePoint ou par votre navigateur.

Pour remédier à ce problème, voici une solution possible: insérer un caractère « blanc » si la condition du test n’est pas remplie (cela suppose d’utiliser une structure xsl:choose à la place d’un xsl:if) ce qui donne la chose suivante:

Résolution du problème

Pensez donc bien à toujours faire en sorte qu’il y ait au moins un élément (même vide) à l’intérieur de vos conteneurs HTML dans vos feuilles de styles XSL

+ There are no comments

Add yours