Je veux analyser avec XmlSlurper un document HTML que j'ai lu en utilisant HTTPBuilder. J'ai essayé de initialement faire de cette façon:Numéro Groovy XMLSlurper
def response = http.get(path: "index.php", contentType: TEXT)
def slurper = new XmlSlurper()
def xml = slurper.parse(response)
Mais il produit une exception:
java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
J'ai trouvé une solution pour fournir des fichiers de DTD mises en cache. J'ai trouvé une implémentation simple de classe qui devrait aider here:
class CachedDTD {
/**
* Return DTD 'systemId' as InputSource.
* @param publicId
* @param systemId
* @return InputSource for locally cached DTD.
*/
def static entityResolver = [
resolveEntity: { publicId, systemId ->
try {
String dtd = "dtd/" + systemId.split("/").last()
Logger.getRootLogger().debug "DTD path: ${dtd}"
new org.xml.sax.InputSource(CachedDTD.class.getResourceAsStream(dtd))
} catch (e) {
//e.printStackTrace()
Logger.getRootLogger().fatal "Fatal error", e
null
}
}
] as org.xml.sax.EntityResolver
}
Mon arbre paquet se présente comme indiqué ci-dessous:
J'ai modifié aussi un peu de code pour la réponse de l'analyse, de sorte qu'il ressemble ceci:
def response = http.get(path: "index.php", contentType: TEXT)
def slurper = new XmlSlurper()
slurper.setEntityResolver(org.yuri.CachedDTD.entityResolver)
def xml = slurper.parse(response)
Mais maintenant je reçois java.net.MalformedURLException
. chemin DTD de CachedDTD connecté EntityResolver est org/yuri/dtd/xhtml1-transitional.dtd
et je ne peux pas le faire fonctionner ...