2015-02-09 3 views
1

Будучи спортивным ботаником, которым я являюсь, я ищу ежедневные XML-файлы, которые создаются на веб-сайте Бейсбола Высшей лиги, и импортировать их в базу данных Access или MySQL. Проблема, с которой я сталкиваюсь, заключается в том, что почти каждый созданный ими XML-файл немного отличается от последнего. Например, один файл игры может иметь поле с именем batter23, которое находится рядом с event22, а другой файл вызывает его batter24 и находится рядом с pitcher25. Я знаю, что файлы XML могут быть непоследовательными, но я знаю, что должен быть способ последовательно получать данные в базу данных. Нужно ли стандартизировать эти XML-файлы? Некоторый код, который будет анализировать каждый файл в списке и организовывать их в определенный стиль и давать им согласованные имена полей? В настоящее время я сначала импортирую XML-файл в лист Excel, где я меняю тип файла на CSV, но отсюда имена полей и расположения столбцов по-прежнему отличаются от файлов к файлу.Импорт данных XML в базу данных

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

+0

Образец вашего XML будет необходим, чтобы дать хороший ответ. В противном случае это ответ на основе мнения, который потенциально оффтопик для StackOverflow. Я бы предложил посмотреть 'perl' и' XML :: Twig' как хорошие опции для синтаксического анализа XML. (И если вы можете дать образец XML и желаемый результат, я могу сбить вас с примера). – Sobrique

ответ

2

Файлы довольно стандартны, поскольку XML идет .., вам просто нужно понять, что представляет собой каждый файл.

Я сделал быстрый взгляд вокруг Red Sox об Royals игры от 14 сентября (Go Сокс!) В year_2014/month_09/day_14/gid_2014_09_14_bosmlb_kcamlb_1/players.xml Я могу видеть, что Ортис имеет идентификатор 120074.

Если я смотрю в колоды для своего игрока Id, я могу видеть его статистику для этой игры. (year_2014/month_09/day_14/gid_2014_09_14_bosmlb_kcamlb_1/batters/120074.xml)

Продолжение. В принципе, чтобы загрузить эти файлы в базу данных, вы будете иметь некоторый уровень обработки, чтобы они имели смысл. Идентификаторы, кажется, не меняются между играми, но я только беглый взгляд.

Что касается загрузки данных, XML :: Simple in perl может использовать XML и легко выводить структуру данных perl. Если вам не нужен что-то более тяжелое, это должно вас охватить.

Загрузка players.xml:

#!/bin/env perl 
use strict; use warnings; 

use Data::Dumper; 
use XML::Simple; 

my $players_xml = XMLin('players.xml'); 

print Dumper $xml; 

дает вам что-то вроде:

$VAR1 = { 
    'venue' => 'Kauffman Stadium', 
    'date' => 'September 14, 2014', 
    'team' => { 
     'Boston Red Sox' => { 
      'id' => 'BOS', 
      'player' => { 
       '605141' => { 
        'avg' => '.283', 
        'team_abbrev' => 'BOS', 
        'parent_team_id' => '111', 
        'hr' => '4', 
        'team_id' => '111', 
        'status' => 'A', 
        'last' => 'Betts', 
        'rl' => 'R', 
        'parent_team_abbrev' => 'BOS', 
        'first' => 'Mookie', 
        'rbi' => '12', 
        'game_position' => '2B', 
        'num' => '50', 
        'position' => '2B', 
        'current_position' => '2B', 
        'boxname' => 'Betts', 
        'bats' => 'R', 
        'bat_order' => '1' 
       }, 
       ... 

Это то тривиальным для навигации эти хэши и вставлять строки DB, как вам нравится.

+0

Файлы файлов проигрывателя и файлы, которые доступны для просмотра в Интернете, кажутся довольно стандартным форматированием, я не видел много изменений из файла в файл. Проблема возникает в файлах Inning by Inning, которые по какой-то причине не кажутся доступными для просмотра в Интернете (но были каким-то образом загружены с помощью скрипта синтаксического анализа perl). Я могу добавить 2 файла для сравнения, но они были довольно большими и уродливыми. Будет ли скрипт perl, который вы предоставили, с непоследовательными именами полей? ex: файл содержит список столбцов batter, а файл 2 - как batter22. Заранее спасибо! – Jcmoney1010

+0

Возможно, некоторые URL-адреса файлов, на которые вы смотрите, и имена полей, которые вы видите, помогут.Я просто взглянул на возможности для той же игры, и атрибуты полностью согласуются (тесто, кувшин и т. Д.). –

+0

После прочтения вашего последнего комментария я вернулся, чтобы проверить файлы необработанных данных, и вы правы, сами файлы согласованы. Сначала я этого не понимал, потому что я импортировал их в Excel для упрощения просмотра. По-видимому, Excel переименовывал строки заголовков. к сожалению, мне не удалось заставить этот код работать, поэтому я все еще застрял. Я продолжаю получать сообщение об ошибке «каталог файла не существует» или «Разрешено разрешение». Это моя первая попытка перла, поэтому я могу просто ошибаться. – Jcmoney1010

Смежные вопросы