Проблема Groovy XMLSlurper

Я хочу проанализировать с помощью XmlSlurper документ HTML, который я прочитал с помощью HTTPBuilder. Первоначально я пытался сделать это следующим образом:

def response = http.get(path: "index.php", contentType: TEXT)
def slurper = new XmlSlurper()
def xml = slurper.parse(response)

Но это вызывает исключение:

java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

Я нашел обходной путь для предоставления кэшированных файлов DTD. Я нашел простую реализацию класса, которая должна помочь здесь :

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

}

Мое дерево пакетов выглядит так, как показано ниже:

alt text

Я также изменил небольшой код для синтаксического анализа ответа, поэтому он выглядит так:

def response = http.get(path: "index.php", contentType: TEXT)
def slurper = new XmlSlurper()
slurper.setEntityResolver(org.yuri.CachedDTD.entityResolver)
def xml = slurper.parse(response)

Но теперь я получаю java.net.MalformedURLException . Записанный путь DTD из CachedDTD entityResolver - org / yuri / dtd / xhtml1-transitional.dtd , и я не могу заставить его работать ...

1
задан jjczopek 19 September 2010 в 09:58
поделиться