簡體   English   中英

PHP將GZ文件解析為XML

[英]PHP parse GZ file as XML

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

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

我使用此代碼進行提取...

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

但!!! 該文件是111000行。

文件格式:

<?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,如何解析一個大文件?

對不起,英語不好。

您可以對解壓縮的文件本身使用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>';

不要使用gzfile()填充內存中的數組,而應使用gzread()代替(它只是將文件讀取為字符串,然后將其直接傳遞給simpleXML進行解析

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

編輯

如果文件大於未壓縮數據的MAX_INT字節,則此方法無效

在我看來,最短的路線是將數組內嵌到一個字符串中,然后將該字符串扔給simplexml。

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

然后應該給您一個有效的php對象,以便在數據庫插入中使用。

至於文件大小,您很可能只需要確保在php.ini文件中為PHP進程分配了足夠的內存即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM