2010-07-28 7 views
0

Quelqu'un peut-il me conseiller une bibliothèque pour Java qui me permet d'effectuer une requête XPath sur une page html?Interroger une page HTML avec XPath en Java

J'ai essayé d'utiliser JAXP, mais il continue à me donner une étrange erreur que je ne peux pas sembler fixer (thread "main" java.io.IOException: serveur a renvoyé le code de réponse HTTP: 503 pour URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd).

Merci beaucoup.

EDIT

Je trouve ceci:

// Create a new SAX Parser factory 
SAXParserFactory factory = SAXParserFactory.newInstance(); 

// Turn on validation 
factory.setValidating(true); 

// Create a validating SAX parser instance 
SAXParser parser = factory.newSAXParser(); 

// Create a new DOM Document Builder factory 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 

// Turn on validation 
factory.setValidating(true); 

// Create a validating DOM parser 
DocumentBuilder builder = factory.newDocumentBuilder(); 

de http://www.ibm.com/developerworks/xml/library/x-jaxpval.html Mais tourner le argumrent false ne changeait rien.

+0

Plusieurs questions connexes - voir http://stackoverflow.com/questions/9766776/extract-content-using-xpath-from-an-html-doc-using-pure-java http://stackoverflow.com/questions/3361263/library-to-query-html-avec-xpath-en-java http://stackoverflow.com/questions/9022140/using-xpath-contains-against-html-in-java –

Répondre

1

La définition de l'analyseur sur "non validant" désactive simplement la validation; il ne pas inhiber la récupération des DTD. La récupération de DTD est nécessaire non seulement pour la validation, mais aussi pour l'expansion d'entités ... autant que je me souvienne.

Si vous souhaitez supprimer l'extraction des DTD, vous devez enregistrer un EntityResolver approprié au DocumentBuilderFactory ou au DocumentBuilder. Implémentez la méthode EntityResolverresolveEntity pour toujours retourner une chaîne vide.

0

Jetez un oeil à ceci:

http://www.w3.org/2005/06/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic

Vous avez probablement l'analyseur configuré pour exécuter la validation DOM, et il tente de récupérer la DTD. JAXP devrait avoir un moyen de désactiver la validation DTD, et il suffit d'exécuter XPATH sur un document supposé valide. Je n'ai pas utilisé JAXP depuis de nombreuses années donc je suis désolé je ne pourrais pas être plus utile.