2009年10月11日日曜日

ローカル上で、XmlSlurper で xhtml を読み込む時はフィーチャーを指定すること

Groovy で、xhtml を XmlSlurper で処理しようと思い、
def src = args[0]
def htmlFile=new File(src)
String str = htmlFile.getText("UTF8")

def node = new XmlSlurper().parseText(str)
//以下略
のようにやってみたら

Caught: java.io.IOException: Server returned HTTP response code: 503 for URL:
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
at xmlSlurperTest.run(xmlSlurperTest_2.groovy:4)
というエラーが出て止まる。
ローカル上でやっているので、xhtml の DTD を読みに行って503ってことらしい。
隣に居たO部長に
「〜となるんですけど、DTD を読みに行かずにする設定ってどうやるのか知りませんか?」
「ヘッダ読み込まなきゃいいんじゃないの?」
そうですけど…
「もういいです自分で調べます」
って言って Groovy の JavaDoc 見に行こうとしてたら方法をメッセンジャーで送ってもらえた。

def src = args[0]
def htmlFile=new File(src)
String str = htmlFile.getText("UTF8")

def parser = new XmlSlurper()
//↓フィーチャーの指定。これを入れないと DTD を読みにいってエラーになる。
parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)
def node = parser.parseText(str)
//以下略
フィーチャー?
Java 入門 | DOM (Document Object Model)
groovy.util.XmlSlurper は org.xml.sax.helpers.DefaultHandler のサブクラスで、基本的にはSAXみたい。
デフォルトで true なのか。ふむ。

0 件のコメント: