2008-08-29 4 views
1

Comment abréviez-vous programmatiquement XHTML à un nombre arbitraire de mots sans laisser de balises non fermées ou corrompues?Comment abberiez-vous XHTML à un nombre arbitraire de mots?

à savoir

<p> 
    Proin tristique dapibus neque. Nam eget purus sit amet leo 
    tincidunt accumsan. 
</p> 
<p> 
    Proin semper, orci at mattis blandit, augue justo blandit nulla. 
    <span>Quisque ante congue justo</span>, ultrices aliquet, mattis eget, 
    hendrerit, <em>justo</em>. 
</p> 

à 25 mots abrégé serait:

<p> 
    Proin tristique dapibus neque. Nam eget purus sit amet leo 
    tincidunt accumsan. 
</p> 
<p> 
    Proin semper, orci at mattis blandit, augue justo blandit nulla. 
    <span>Quisque ante congue...</span> 
</p> 

Répondre

1

Recurse dans l'arborescence DOM, en gardant une variable de nombre de mots à jour. Lorsque le nombre de mots dépasse votre nombre maximal de mots, insérez "..." et supprimez tous les frères et sœurs suivants du noeud actuel, puis, lorsque vous parcourez la récursivité, supprimez tous les frères et sœurs suivants de chacun de ses ancêtres.

1

Vous devez considérer le XHTML comme une hiérarchie d'éléments et le traiter comme tel. C'est essentiellement la façon dont XML est censé être traité. Ensuite, parcourez la hiérarchie de manière récursive, en ajoutant le nombre de mots au fur et à mesure. Quand vous atteignez votre limite, jetez tout le reste.

Je travaille principalement en PHP, et j'utiliserais la classe DOMDocument en PHP pour m'aider, vous devez trouver quelque chose comme ça dans votre langue.

Pour rendre les choses plus claires, voici la hiérarchie de votre échantillon:

- p 
    - Proin tristique dapibus neque. Nam eget purus sit amet leo 
     tincidunt accumsan. 
- p 
    - Proin semper, orci at mattis blandit, augue justo blandit nulla. 
    - span 
      - Quisque ante congue justo 
    - , ultrices aliquet, mattis eget, hendrerit, 
    - em 
      - justo 
    - . 

Vous avez touché l'intérieur de l'élément span limite de 25 mots, vous supprimez tout le texte restant dans la durée et d'ajouter les points de suspension. Tous les autres éléments enfants (texte et balises) peuvent être ignorés et tous les éléments suivants peuvent être supprimés. Cela devrait toujours vous laisser avec un balisage valide autant que je peux voir, parce que vous le traitez comme une hiérarchie et pas seulement du texte, toutes les balises de fermeture qui sont requises seront toujours là.

Bien sûr, si le XHTML que vous traitez n'est pas valide pour commencer, ne vous attendez pas à ce que la sortie soit valide.

Désolé pour le mauvais exemple de hiérarchie, n'a pas pu trouver comment imbriquer des listes.

Questions connexes