PHP将GZ文件解析为XML

时间:2011-03-22 17:20:20

标签: php xml parsing gz

我有“filmsdb-full.gz”文件。

重量“filmsdb-full.gz”为5 mb,其中的文件重量为17 mb。

我使用此代码进行提取...

$file = gzfile('filmsdb-full.gz');

BUT !!!这个文件是111 000行。

文件格式:

<?xml version="1.0" encoding="utf-8" ?><movie_list count="8427"><movie>
        <id>1</id>
        <title_en><![CDATA[Alice in Wonderland (1951)]]></title_en>
        <title><![CDATA[Алиса в стране чудес]]></title>
        <description><![CDATA[Убежав из дома, Алиса увидела под старой яблоней большого белого кролика, одетого в куртку и жилет. Достав из кармана часы, кролик торопливо скрылся в подозрительно темной норе. Набравшись смелости, Алиса шагнула вслед за ним…и попала в чудесный сказочный мир, где сбываются самые несбыточные фантазии. <br><br>Чтобы попасть обратно домой, Алисе придется совершить путешествие через весь этот странный и причудливый мир, в котором ее поджидают совершенно невероятные приключения и совершенно фантастические существа…]]></description>
        <movie_img><![CDATA[http://ext-1.24videodirect.com/2495121131.4383_09014500260082001215017400185150597625_0/9261551.jpg]]></movie_img>
        <movie_uri><![CDATA[alice_in_wonderland_1951]]></movie_uri>
        <movie_add_ts>1246629600</movie_add_ts>
        <year><![CDATA[1951]]></year>
        <actors><![CDATA[Катрин Бомонт, Эд Винн, Ричард Хейдн, Стерлинг Холлоуэй, Джерри Колонна, Верна Фелтон, Дж. Пэт О`Мэлли, Билл Томпсон, Джозеф Кернс, Ларри Грэй, Куеени Леонард, Dink Trout, Дорис Ллойд, Джеймс МакДональд, Билл Ли, Thurl Ravenscroft, Макс Смит, Боб Хэмлин, Дон Барклай, Стэн Фреберг:озвучка, в титрах не указан]]></actors>
        <director><![CDATA[Хэмильтон Ласки, Уилфред Джексон, Клайд Джероними]]></director>
        <type><![CDATA[фэнтези, мюзикл, приключения, семейный, мультфильм]]></type>
        <has_online_cast_files>0</has_online_cast_files>
    </movie><movie>
        <id>2</id>
        <title_en><![CDATA[Bring It On]]></title_en>
        <title><![CDATA[Добейся успеха / Заводилы]]></title>
        <description><![CDATA[Эти девчонки из группы поддержки университетской футбольной команды знают, как привлечь к себе внимание. При взгляде на них у ребят резко повышается кровяное давление. Они просто обворожительны, сногсшибательны, их энергичные танцы приводят в возбуждение толпы болельщиков.<br><br>Они пользуются бешеным успехом, ведь их упругие молодые тела вырабатывают такое количество сексуальной энергии, что зрители, позабыв про футбол, приходят на стадион только ради них.<br><br>Но, поскольку, такая группа поддержки есть почти у каждого университета, между девчонками из разных команд разгорается нешуточная борьба за звание лучшей в своем роде.<br><br>В ход идут самые неожиданные приемы и ухищрения, и порой дело близится к рукопашной. Но, чтобы действительно считаться лучшей командой, надо победить в национальном чемпионате, а этого смогут добиться только самые красивые, самые талантливые, самые задорные и сексуальные.  ]]></description>
        <movie_img><![CDATA[http://ext-1.24videodirect.com/3323121.3215921_000276001900740018450112004529811875_939/194529.jpg]]></movie_img>
        <movie_uri><![CDATA[bring_it_on]]></movie_uri>
        <movie_add_ts>1246618800</movie_add_ts>
        <year><![CDATA[2000]]></year>
        <actors><![CDATA[Кирстен Данст, Элиза Душку, Джесси Брэдфорд, Гэбриэл Юнион, Клер Крамер, Николь Бильдербак, Цианина Джоелсон, Рини Белл, Натан Уэст, Хантли Риттер, Shamari Fears, Natina Reed, Брэнди Уильямс, Линдсэй Слоун, Бьянка Кайлич, Холмс Осборн, Шерри Херси, Коди МакМейнс, Йен Робертс, Дэвид Э. Тейлор, Эшли Ховард, Nikole Lee Amateau, Клементайн Форд, Грант Томпсон, Леонард Клифтон, Мари Коул, Дрю Маузер, Alicia Michelle Sassano, Natasha Soll, Райан Драммонд, Paullin Wolff, Дэвид Э. Уиллис, Бет Ламюр, Энн Флетчер, Даг Уальдо, Энни Хинтон, Луиз Галлахер, Эдмонд Клэй, Даниелла Кун, Алома Райт, Пол Блум, Melanie Atmadja, Пейтон Рид, Джоди Харрис, Нэктар Роуз, Хилари Сальваторе, Элизабет Джонсон, Райли Смит, Anna Lisa Mendiola, Алекс Фергюсон, Руби Гонзалез, Lisel M. Gorell, Brandon Henschel, Ричард Хиллман, Робби Дживс, Майкл МакКафферти, Келли Милнер, Джейсон Торнтон:Guy Cheerleader, в титрах не указан]]></actors>
        <director><![CDATA[Пейтон Рид]]></director>
        <type><![CDATA[комедия, спорт]]></type>
        <has_online_cast_files>0</has_online_cast_files>
    </movie><movie>
        <id>3</id>
        <title_en><![CDATA[6th Day, The / The Sixth Day]]></title_en>
        <title><![CDATA[Шестой день / 6ой день]]></title>
        <description><![CDATA[В начале третьего тысячелетия самым суровым законом стал &laquo;закон Шестого дня&raquo;. Он&nbsp;запрещал клонирование людей и&nbsp;создание искусственных копий человека. Но&nbsp;огромная подпольная империя вопреки запрету выращивает человечество нового будущего, сотни управляемых теней.<br><br>Налаженная машина преступления не&nbsp;давала сбоев, пока в&nbsp;ее совершенный механизм не&nbsp;вмешалась случайность: пилот вертолета Адам Гибсон неожиданно приоткрыл непроницаемую завесу заговора. Теперь он&nbsp;&#151; последний рубеж обороны, отделяющий цивилизацию от&nbsp;общества зомби.]]></description>
        <movie_img><![CDATA[http://ext-1.24videodirect.com/311512266.15446_08035345390018000072017400126954086_7258/8397269.jpg]]></movie_img>
        <movie_uri><![CDATA[6th_day_the_the_sixth_day]]></movie_uri>
        <movie_add_ts>1246645219</movie_add_ts>
        <year><![CDATA[2000]]></year>
        <actors><![CDATA[Арнольд Шварценеггер, Майкл Рапапорт, Тони Голдуин, Майкл Рукер, Сара Уайнтер, Родни Роулэнд, Роберт Дювалл, Марк Брэндон, Бен Басс:Bodyguard]]></actors>
        <director><![CDATA[Роджер Споттисвуд]]></director>
        <type><![CDATA[фантастика, боевик, триллер]]></type>
        <has_online_cast_files>0</has_online_cast_files>
    </movie><movie>
        <id>5</id>
        <title_en><![CDATA[The Cell]]></title_en>
        <title><![CDATA[Клетка]]></title>
        <description><![CDATA[Главная героиня фильма, психиатр, проникает в&nbsp;сознание серийного убийцы, находящегося в&nbsp;коме. На&nbsp;его счету уже&nbsp;почти десяток жертв, а&nbsp;жертвами, как&nbsp;правило, становятся молодые привлекательные девушки, которых маньяк истязает самым нечеловеческим образом, прежде чем&nbsp;лишить их&nbsp;жизни.<br><br>Последнюю похищенную им&nbsp;девушку пока так&nbsp;и не&nbsp;нашли, но&nbsp;есть надежда, что&nbsp;ее еще&nbsp;можно спасти. Однако для&nbsp;этого сначала надо внедриться в&nbsp;темные мозги психопата и&nbsp;выяснить, где&nbsp;же находится страшная камера пыток.]]></description>
        <movie_img><![CDATA[http://ext-1.24videodirect.com/2231121801.7527_010500459700180074310182001201136856_211/1973101.jpg]]></movie_img>
        <movie_uri><![CDATA[the_cell]]></movie_uri>
        <movie_add_ts>1246645219</movie_add_ts>
        <year><![CDATA[2000]]></year>
        <actors><![CDATA[Винс Вон, Джейк Уэбер, Дилан Бейкер:Henry West]]></actors>
        <director><![CDATA[Тарсем Синх]]></director>
        <type><![CDATA[фэнтези, фантастика, триллер, ужасы, драма, криминал]]></type>
        <has_online_cast_files>0</has_online_cast_files>
    </movie>

我需要将这个XML文件解析为MySQL数据库..

如果文件是XML,如何解析文件?

抱歉英文不好。

3 个答案:

答案 0 :(得分:4)

您可以在解压缩文件本身上使用BULK加载。

CREATE TABLE movies (
    id INT NOT NULL PRIMARY KEY,
    title_en VARCHAR(40) NULL,
    title VARCHAR(40) NULL,
    description TEXT,
    etc......
);

LOAD XML LOCAL INFILE 'movies.xml'
INTO TABLE movies
ROWS IDENTIFIED BY '<movie>';

答案 1 :(得分:1)

不要使用填充内存数组的gzfile(),而是使用gzread()(它只是将文件作为字符串读取,并将其直接传递给simpleXML进行解析

$xml = new SimpleXMLElement(gzread('filmsdb-full.gz'),MAX_INT);

修改

如果文件大于MAX_INT字节的未压缩数据,那么这将不起作用

答案 2 :(得分:0)

对我来说似乎最短路径是将数组内爆成一个字符串,然后将该字符串抛出到simplexml。

$string = implode($file);
$xmlObj = new SimpleXMLElement($string);

然后应该为您提供一个可用于数据库插入的工作php对象。

至于filesize,你很可能只需要确保在php.ini文件中为PHP进程分配了足够的内存。