【问题标题】:Split Large XML File Into Smaller Files将大型 XML 文件拆分为较小的文件
【发布时间】:2013-08-26 14:23:02
【问题描述】:

我有一个电子商务网站,需要通过从分销商通过 ftp 下载的巨大 XML 文件来更新产品。

products.xml 文件大小约为 21MB,提取数据并循环通过它对于单次传递来说过于详尽。

我需要能够将原始 XML 文件或我处理的 SimpleXMLElement 拆分为每个 1000 个产品,然后加载文件并分别处理它们。

我将 xml 提取到 SimpleXMLElement 中,然后将其转换为数组,如下所示:

[1] => Array
    (
        [PRODUCTS_NAME] => Product Name
        [PRODUCTS_DESCRIPTION] => Product Description
        [PRODUCTS_IMAGE] => 1234.jpg
        [PRODUCTS_PRICE] => 9.99
        [PRODUCTS_MODEL] => 1234
        [ITEM_BRANDNAME] => Acme Inc.
        [ITEM_UPC] => 01234567890
        [ITEM_HEIGHT] => 0.500
        [ITEM_LENGTH] => 4.250
        [ITEM_DIAMETER] => 3.375
        [PRODUCTS_WEIGHT] => 0.05
        [MANUFACTURERS_NAME] => Acme Distributors
        [ITEM_VENDOR_NUMBER] => XXX-1234
        [PRODUCTS_QUANTITY] => 100
        [DATE_RECIEVED] => 0000-00-00 00:00:00
        [PROP_PACKAGING] => Blister Card
        [PRODUCT_CLASS] => BAT
        [PRODUCTS_TYPE] => Batteries
    )

如何在每个文件中创建包含 1000 个产品的单独文件并保存?

【问题讨论】:

  • 我知道这与问题无关,但是为什么要将对象转换为数组? SimpleXML 的全部意义在于您可以像访问对象或数组一样访问它,并提取您想要的任何细节。
  • 你必须使用 PHP 吗?你可以用 Java 吗?

标签: php xml simplexml


【解决方案1】:

您可以使用simplexml 函数来做到这一点:

$xml = simplexml_load_file('products.xml');

foreach($xml as $id => $product)
{
    $product->asXml($id.'.xml');
}

您可以使用simplexml_load_string 代替simplexml_load_file

$xml = simplexml_load_string($products);

注意:必须是SimpleXMLElement

【讨论】:

    【解决方案2】:

    XMLReaderIterator切换到XMLReader

    并使用指令here.

    非常好的实现,感谢 hakre 的构建,效果很棒。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多