5568 sujets

Sémantique web et HTML

Bonjour à tous,

j'ai écris un programme XSLT qui récupère des données XML pour les insérer dans une page HTML. La structure de cette page prévoit des blocs pour afficher ces données, sur le modèle:

<div class="titre">...</div>
<div class="contain">...</div>
<ul>...</ul>
<ul>...</ul>


Parfois <div class="contain"> n'est remplie par aucune information et du coup le processeur supprime la balise de fermeture, en écrivant uniquement <div class="contain" />.

Le problème est que les navigateurs, surtout Firefox, interprètent mal ce code et me rendent en code source généré ceci:

<div class="titre">...</div>
<div class="contain">
  <ul>...</ul>
  <ul>...</ul>
</div>


ce qui, bien évidement, fout en l'air la mise en page HTML.

Savez-vous me dire comment faire pour garder ce <div> même s'il est vide?
La solution se trouve en XSLT, HTML ou CSS?

Merci pour les suggestions,

Grandvampire

P.s. Si ce post se trouve dans le mauvais salon et il devrait plutôt se trouver dans celui du XML ou CSS, merci de me le signaler! Smiley biggrin
Modifié par GrandVampire (25 Aug 2010 - 16:02)
Salut,

Je n'ai pas ce problème, le div est bien auto-fermant quand j'affiche mais la source Firefox l'interprète bien. Tu utilises quel version ?
Bonjour,

C'est une différence entre la syntaxe HTML et XML.

En XML:
- un élément vide s'écrit toujours: <element/>

En HTML:
- un élément qui «par nature» est vide s'écrit: <element> (ou éventuellement <element />, mais le / final est alors simplement ignoré)
- un élément qui peut accueillir un contenu s'écrit forcément <element></element>, et jamais <element/>.

Donc tu dois, d'une manière ou d'une autre, corriger le code produit. Tu ne peux pas corriger le comportement du parseur HTML du navigateur, qui est correct.
Bonjour et merci pour vos réponses.

a écrit :
Donc tu dois, d'une manière ou d'une autre, corriger le code produit. Tu ne peux pas corriger le comportement du parseur HTML du navigateur, qui est correct.


Oui effectivement, c'est ce que j'essaye de faire, mais je n'ai pas la main sur le processeur de transformation et je ne peux donc pas éviter qu'il me crée une balise html comme <element/>...

J'ai alors créé une condition XSL pour que, dans le cas où aucun contenu ne rempli le <div> , je puisse le remplir avec des espaces ou un <xsl:text> </xsl:text>, mais cela ne marche pas non plus!

À noter que le processeur est pourri et il n'accepte pas les entités!!! Smiley biggol

Au final, la seule astuce que j'ai trouvé, c'est l'insertion d'une image transparente...

Je ne suis pas très fier de cette solution Smiley ohwell alors, si quelqu'un a une solution plus orthodoxe, je suis preneur! Smiley murf

GrandVampire
Modifié par GrandVampire (25 Aug 2010 - 13:12)
Eh bien voilà la solution magique! Smiley biggrin

ça marche parfaitement et ça m'a résolu d'autres problèmes que je ne considérais pas liés...
comme quoi, des bonnes déclarations sont indispensables à un bon travail.

Merci énormément,

GrandVampire