在Groovy中解析RSS Feed时出错

时间:2013-09-02 15:16:42

标签: xml groovy rss

我试图找出为什么这个小脚本不会在Groovy中执行。

def url = "http://danvega.org/blog/rss.cfm"
def feed = new XmlSlurper().parse(url)

当我尝试运行时,我收到以下错误。

[Fatal Error] index.cfm:39:23: The reference to entity "postID" must end with the ';' delimiter.
Exception thrown

org.xml.sax.SAXParseException: The reference to entity "postID" must end with the ';' delimiter.
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
    at groovy.util.XmlSlurper.parse(XmlSlurper.java:147)
    at groovy.util.XmlSlurper.parse(XmlSlurper.java:213)
    at groovy.util.XmlSlurper$parse$0.call(Unknown Source)
    at ConsoleScript20.run(ConsoleScript20:3)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1249)

我没有在XML中看到对postID的任何引用,我可以在我的rss阅读器中使用这个xml,所以我的结果必须正确(和错误)。有谁知道会导致什么?

1 个答案:

答案 0 :(得分:2)

出于某种原因(我猜是由于浏览器嗅探?),http://danvega.org/blog/rss.cfm正在重定向(302暂时移动)到http://danvega.org/blog/mobile/index.cfm

所以XML阅读器在Javascript上窒息。我想这就是这条线:

            var postID = '';

如果您无法修复此服务器端,那么您可以随时在客户端中进行欺骗:

def spoofedXmlGrab( URL url ) {
    url.openConnection().with { conn ->
        conn.setRequestProperty( 'User-Agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2' )
        conn.inputStream.withReader { ins ->
            new XmlSlurper().parse( ins )
        }
    }
}

def xml = spoofedXmlGrab( 'http://danvega.org/blog/rss.cfm'.toURL() )
xml.channel.item.title.each {
  println it.text()
}