7
votes

Supprimer les paires de tags vides du fragment HTML

J'ai une chaîne soumise par l'utilisateur contenant du contenu HTML tel que

"<p>Hello<br/>world</p>"


0 commentaires

5 Réponses :


8
votes

Pas vraiment familier avec JSOUP, mais vous pouvez le faire avec une simple regex remplacer: xxx

bien qu'avec un analyseur complet, vous pouvez probablement laisser tomber le contenu vide pendant le traitement, en fonction de ce que vous avez 'réelle finalement faire avec ça.


5 commentaires

remplacement ("<[A-ZA-Z0-9] *> ", ""); Peut-être mieux que de laisser autre chose que>


Mais qu'en est-il de italique audacieux ? C'est mauvais usage, mais toujours légitime. Je dois être capable de répliquer exactement ce qui a été utilisé dans le premier ensemble de crochets d'angle.


@Pragalathanm, j'ai envisagé cela, mais les balises permettent également des traits d'union, des traits de soulignement, etc. Une fois que vous avez commencé à ajouter tous ces personnages, la déclaration commence à être laidée (et vous risquez de manquer).


@Frankieethekneeman: italique gras n'est pas légal dans HTML.


Cette solution ne fonctionnera que pour

, pas pour

ou

qui sont équivalents.



0
votes

Si vous utilisez jQuery, vous pouvez le faire comme xxx

violon: http://jsfiddle.net/lqcx5/2/


3 commentaires

Mise à jour de la réponse .. Pls check, sa fonctionnement bien que j'ai testé dans ma machine.


Cela supprimera toutes les étiquettes vides, y compris


Nope mec .. Vous devriez revenir au Downvote ... sa non-retirant
. > jsfiddle.net/lqcx5/3 ... Vérifiez la sortie du corps, bonjour et monde en ligne différentes.



-2
votes

Ne connais pas le JSOUP, ci-dessous fonctionne également avec une simple regex JavaScript. Essayez le code ci-dessous.

function removeall(){
var tagarray=new Array("<p>","<div>");
source="<p></p><div></div><p>Hello<br/>world</p><p></p>";
for ( var int = 0; int < tagarray.length; int++) {
tag2=tagarray[int].replace("<","</");
var tagpair=new RegExp(tagarray[int]+tag2,"g");
source=source.replace(tagpair,"");
    }
alert(source);


1 commentaires

C'est une question Java, alors le code JavaScript n'est donc pas une réponse valide.



1
votes

JSOUP rendra correct XML à partir de l'entrée d'utilisateur HTML. Utilisez XML Parser pour trouver et supprimer toutes les balises vides. Je pense que c'est une meilleure idée que Regexp. Regardez ici: Java Supprimer les tags XML vides Vous pouvez également utiliser JSoup pour trouver des balises vides pour vous. Regardez ici: http://jsoup.org/Cookbook/extractting-data/selector-syntax et utiliser la méthode node.remove ().


0 commentaires

24
votes

Voici un exemple qui ne fait que cela (à l'aide de JSOUP): xxx

La sortie du code ci-dessus est ce que vous recherchez: xxx


5 commentaires

Je l'ai testé et le code ci-dessus imprime

bonjour
World


J'ai remarqué que ce code retire l'IMG vide à l'intérieur d'un Div Ex:

donc j'ai vérifié pour la taille vide aussi: && élément.childnodes (). Taille () == 0, Ma mise à jour correcte?


Je pense que ce serait plus correct si l'instruction si est comme suit ceci: si (((((element.hastext () && élément.isblock ()) || (! Element.hastext () && element.childnodes (). Isefty ())) element.remove () car il élimine également les éléments non bloquants qui sont vides, tels que


Comment puis-je supprimer une balise vide ??


@Mark: Le principal problème avec votre approche sont les étiquettes de fermeture automatique. Vous filtrerez aussi bien qui devrait être conservé!