2017-02-22 1 views
0

J'utilise les méthodes parseBodyFragment() et parse() de Jsoup pour travailler avec des blocs de code composés de script, de noscript et de balises de style. L'objectif n'est pas de les nettoyer - juste pour select(), analyser, et les sortir. La partie select() fonctionne très bien. Cependant, le problème est qu'il code automatiquement les paramètres url des attributs src. Ainsi, lorsque l'entrée est la suivante:Comment arrêter Jsoup d'encoder les paramètres d'URL?

<noscript> 
<img height="1" width="1" style="display:none;" alt="" src="https://something.orother.com/i/cnt?txn_id=123&p_id=123"/> 
</noscript> 

Je finis avec cela, est revenu de Jsoup, via la méthode outerHTML():

<noscript> 
<img height="1" width="1" style="display:none;" alt="" src="https://something.orother.com/i/cnt?txn_id=123&amp;p_id=123"/> 
</noscript> 

La question étant l'esperluette standard (&) dans le paramètre url est en cours de codage et sort en tant que &amp;. Y at-il un moyen de désactiver cela?

Je cherche un moyen d'obtenir le html de l'élément sélectionné sans modification. Merci!

Mise à jour (23/02/2016): Problème clarifié. En outre, trouvé un problème sur le rapport Github décrivant le problème: https://github.com/jhy/jsoup/issues/372. On dirait que cela pourrait ne pas être possible.

+0

vous pouvez obtenir pagedocument en utilisant parse et plus tard obtenir le contenu en utilisant select. – thanga

+0

@thanga merci - j'aurais dû être plus clair; Je suis capable de l'utiliser avec select - le problème est après que je l'ai eu. Il semble que Jsoup modifie le HTML sans un moyen d'obtenir le code original. J'ai trouvé un problème sur le rapport Github le décrivant aussi, donc je pense que ce ne serait peut-être pas possible. Je vais mettre à jour la question pour inclure un lien vers le problème. –

Répondre

0

Le code HTML original n'est pas valide Un & qui ne démarre pas une référence de caractère doit être exprimé comme &amp; dans une valeur d'attribut HTML.

Les analyseurs HTML doivent effectuer une récupération d'erreur et générer un DOM valide. Jsoup fonctionne en analysant le code HTML dans un DOM, ce qui vous permet d'exécuter des requêtes sur celui-ci, puis d'exporter le DOM au format HTML par la suite.

Vous ne pouvez pas éviter la normalisation de l'espace blanc, la récupération d'erreur ou l'une des autres opérations effectuées par les analyseurs. L'approche utilisée par Jsoup pour extraire des données n'est pas conçue pour soutenir la préservation des erreurs.

+0

merci, mais je crois comprendre que HTML5 a assoupli cette restriction. Voir: http://stackoverflow.com/a/19442133/5361034, qui cite également la spécification: https://www.w3.org/TR/html5/syntax.html#tokenizing-character-references - –