Нужна помощь в чтении XML-файла с PHP - PullRequest
4 голосов
/ 21 марта 2011

привет Я хочу прочитать файл ниже, используя php. файл очень большого размера (в ГБ). Пожалуйста, помогите мне, потому что я не знаю об этом.

Вот файл

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <Articles>
        <Article>
            <header>info about article  </header>

        <metadata>


                    <dc:title>title here</dc:title>
                    <dc:author>author 1</dc:author>
                    <dc:author>author 2</dc:author>
                    <dc:author>author 3</dc:author>
                    <dc:author>author n</dc:author>

                    <dc:subject>subject here</dc:subject>


            </metadata>
        </Article>

        <resume> resume infor </resume>
        </Articles>

Ответы [ 3 ]

6 голосов
/ 21 марта 2011

Если файл такого размера, вам, вероятно, потребуется использовать XMLReader , чтобы избежать нехватки памяти в отличие от SimpleXML.

0 голосов
/ 21 марта 2011

хорошее место для начала - SimpleXML из PHP

0 голосов
/ 21 марта 2011
www.w3schools.com/PHP/php_xml_simplexml.asp

Попробуйте прочитать эту страницу.Это большая помощь.

Обновление Найден этот фрагмент в сообщениях StackOverflow.com:

<?php

class SimpleDMOZParser
{
    protected $_stack = array();
    protected $_file = "";
    protected $_parser = null;

    protected $_currentId = "";
    protected $_current = "";

    public function __construct($file)
    {
        $this->_file = $file;

        $this->_parser = xml_parser_create("UTF-8");
        xml_set_object($this->_parser, $this);
        xml_set_element_handler($this->_parser, "startTag", "endTag");
    }

    public function startTag($parser, $name, $attribs)
    {
        array_push($this->_stack, $this->_current);

        if ($name == "TOPIC" && count($attribs)) {
            $this->_currentId = $attribs["R:ID"];
        }

        if ($name == "LINK" && strpos($this->_currentId, "Top/Home/Consumer_Information/Electronics/") === 0) {
            echo $attribs["R:RESOURCE"] . "\n";
        }

        $this->_current = $name;
    }

    public function endTag($parser, $name)
    {
        $this->_current = array_pop($this->_stack);
    }

    public function parse()
    {
        $fh = fopen($this->_file, "r");
        if (!$fh) {
            die("Epic fail!\n");
        }

        while (!feof($fh)) {
            $data = fread($fh, 4096);
            xml_parse($this->_parser, $data, feof($fh));
        }
    }
}

$parser = new SimpleDMOZParser("content.rdf.u8");
$parser->parse();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...