как получить данные из XML-каналов - PullRequest
1 голос
/ 14 января 2012

У меня есть следующие каналы от моего поставщика, http://scores.cricandcric.com/cricket/getFeed?key=4333433434343&format=xml&tagsformat=long&type=schedule

Я хотел получить данные из этих XML-файлов в виде объектов Java, чтобы я мог регулярно вставлять их в свою базу данных.Приведенные выше данные представляют собой не что иное, как регулярные обновления от поставщика, так что я могу обновлять их на своем веб-сайте.

Не могли бы вы подсказать, какие есть варианты, чтобы это работало

Должен ли я использоватьлюбые веб-сервисы или просто Xstream , чтобы получить мой окончательный результат .. пожалуйста, предложите мне, как новичок в этой концепции

Продавец предложил мне, что он может дать мне данные в следующих 3 форматахrss, xml или json, я не уверен, что легко и менее удобно, чтобы заставить его работать

Ответы [ 3 ]

1 голос
/ 15 января 2012

Я бы предложил написать программу, которая анализирует XML и вставляет данные непосредственно в вашу базу данных.

Пример

Этот простой скрипт вставляет данные в базу данных 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)
    }
}
0 голосов
/ 14 января 2012

На самом деле у вас есть хранилище RESTful, которое может возвращать данные в нескольких форматах, и вам нужно только читать из этого источника, и больше никакого взаимодействия не требуется. Таким образом, вы можете использовать любой синтаксический анализатор XML для анализа XML-данных и помещать извлеченные данные в любую структуру данных, которую вы хотите или у вас есть.

Я не слышал о XTREME, но вы можете найти больше информации о выборе лучшего анализатора для вашей ситуации на этом вопросе StackOverflow .

0 голосов
/ 14 января 2012

Хорошо ... вы могли бы использовать 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 и иметь дело с разделением символов (например, когда в строке есть «или»), но это значительно сократит ваш сетевой трафик и, вероятно, будет намного быстрее анализироваться на клиенте.Конечно, это зависит от того, кто ваш клиент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...