2010-09-19 3 views
1

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:

alt text

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 ...

Répondre

Questions connexes