我试图找出为什么这个小脚本不会在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,所以我的结果必须正确(和错误)。有谁知道会导致什么?
答案 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()
}