如何从xml提要中获取数据

时间:2012-01-14 13:34:19

标签: java xml parsing

我的供应商提供以下供稿, http://scores.cricandcric.com/cricket/getFeed?key=4333433434343&format=xml&tagsformat=long&type=schedule

我想将xml文件中的数据作为java对象获取,以便我可以定期插入到我的数据库中。 以上数据只是供应商的定期更新,因此我可以在我的网站上更新。

你可以告诉我有什么选择可以让你的工作

我应该使用任何网络服务还是只使用Xstream 得到我的最终输出..请建议我作为这个概念的新来者

供应商建议我他可以用以下3种格式rss,xml或json给我数据,我不确定什么是简单的,耗时少,以使其正常工作

3 个答案:

答案 0 :(得分:1)

我建议只编写一个解析XML的程序并将数据直接插入到数据库中。

实施例

这个groovy脚本将数据插入H2数据库。

// 
// Dependencies
// ============
import groovy.sql.Sql

@Grapes([
    @Grab(group='com.h2database', module='h2', version='1.3.163'),
    @GrabConfig(systemClassLoader=true)
])

//
// Main program
// ============
def sql = Sql.newInstance("jdbc:h2:db/cricket", "user", "pass", "org.h2.Driver") 

def dataUrl = new URL("http://scores.cricandcric.com/cricket/getFeed?key=4333433434343&format=xml&tagsformat=long&type=schedule")

dataUrl.withReader { reader ->
    def feeds = new XmlSlurper().parse(reader)

    feeds.matches.match.each {
        def data = [
            it.id,
            it.name,
            it.type,
            it.tournamentId,
            it.location,
            it.date,
            it.GMTTime,
            it.localTime,
            it.description,
            it.team1,
            it.team2,
            it.teamId1,
            it.teamId2,
            it.tournamentName,
            it.logo
        ].collect {
            it.text()
        }

        sql.execute("INSERT INTO matches (id,name,type,tournamentId,location,date,GMTTime,localTime,description,team1,team2,teamId1,teamId2,tournamentName,logo) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", data)
    }
}

答案 1 :(得分:0)

嗯......您可以使用XML Parser(流或DOM)或JSON解析器(再次是'DOM'流),并动态构建对象。但是这些数据 - 似乎包括板球比赛的记录,为什么不采用csv格式呢?

这似乎是您的基本“基准”:

<id>1263</id>
<name>Australia v India 3rd Test at  Perth - Jan 13-17, 2012</name>
<type>TestMatch</type>
<tournamentId>137</tournamentId>
<location>Perth</location>
<date>2012-01-14</date>
<GMTTime>02:30:00</GMTTime>
<localTime>10:30:00</localTime>
<description>3rd Test day 2</description>
<team1>Australia</team1>
<team2>India</team2>
<teamId1>7</teamId1>
<teamId2>1</teamId2>
<tournamentName>India tour of Australia 2011-12</tournamentName>
<logo>/cricket/137/tournament.png</logo>

当然你仍然需要解析一个csv,并处理字符分隔(例如当你在一个字符串中有一个'或'),但它会大大减少你的网络流量,并且可能解析得更快在客户端。当然,这取决于您的客户是什么。

答案 2 :(得分:0)

实际上你有RESTful商店,它可以以多种格式返回数据,你只需要阅读这个来源,不需要进一步的交互。 因此,您可以使用任何XML Parser来解析XML数据,并将提取的数据放入您想要的任何数据结构中。

我没有听说过XTREME,但您可以在this StackOverflow question找到有关为您的情况选择最佳解析器的更多信息。