当前位置: 首页 > 面试题库 >

用PHP解析巨大的XML文件

劳亦
2023-03-14
问题内容

我正在尝试将DMOZ内容/结构XML文件解析为MySQL,但是所有现有的脚本都已经很老了并且不能很好地工作。如何在PHP中打开大型(+
1GB)XML文件进行解析?


问题答案:

只有两个php API真正适合处理大文件。第一个是旧的expatapi,第二个是较新的XMLreader函数。这些api读取连续流,而不是将整个树加载到内存中(这是simplexml和DOM所做的)。

例如,您可能需要查看DMOZ目录的部分解析器:

<?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();


 类似资料:
  • 为了在巨大的xml文件中执行XPATH查询,我阅读了许多喜欢VTD-xml的文章,因此我复制了这些文章中的代码: 但当我运行它时没有结果,所以这意味着XML文件没有映射到内存中。。。我的问题是如何在VTD-xml中强制映射xml文件?

  • 问题内容: 我需要解析大小为40GB的XML文件,然后进行规范化,然后插入到MySQL数据库中。我尚不清楚需要在数据库中存储多少文件,我也不知道XML结构。 我应该使用哪个解析器,您将如何进行呢? 问题答案: 在PHP中,您可以使用 Docs 读取超大型XML文件: 特大XML文件应以压缩格式存储在磁盘上。至少这是有道理的,因为XML文件具有很高的压缩率。例如,像gzip一样。 PHP 通过压缩包

  • 问题内容: 我有一个巨大的XML文件(15 GB)。我想将XML文件中的“文本”标签转换为单个页面。 样本XML文件: 我最初使用DOM解析器,但它使JAVA OUT OF MEMORY(Valid)不足。现在,我已经使用STAX编写了JAVA代码。它运作良好,但是性能确实很慢。 这是我编写的代码: 这段代码运行良好。(忽略任何小错误)。根据我的理解,XMLStreamConstants.CHAR

  • 本文向大家介绍用PHP解析XML,包括了用PHP解析XML的使用技巧和注意事项,需要的朋友参考一下 XML数据提取可能是一项常见的任务,但是要直接使用此数据,您需要了解PHP如何解析XML。在PHP中解析XML涉及各种不同的功能,所有这些功能协同工作以从XML文档中提取数据。我将完成所有这些功能,并在最后将它们联系在一起。 xml_parser_create() 此函数用于创建解析器对象,该对象将

  • 问题内容: 我正在尝试使用gson库(http://code.google.com/p/google-解析一些巨大的JSON文件(例如http://eu.battle.net/auction- data/258993a3c6b974ef3e6f22ea6f822720/auctions.json )JAVA中的gson / )。 我想知道解析这种大文件(约80k行)的最佳方法是什么,以及您是否知道