gpt4 book ai didi

php - 在 PHP 中流解析 4 GB XML 文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:35:44 24 4
gpt4 key购买 nike

我正在尝试并需要一些帮助来执行以下操作:

我想用 PHP 流式分析一个大的 XML 文件(4 GB)。我不能使用简单的 XML 或 DOM,因为它们会将整个文件加载到内存中,所以我需要可以流式传输文件的东西。

我如何在 PHP 中执行此操作?

我正在尝试做的是浏览一系列 <doc>元素。并将他们的一些 child 写入一个新的 xml 文件。

我试图解析的 XML 文件如下所示:

<feed>
<doc>
<title>Title of first doc is here</title>
<url>URL is here</url>
<abstract>Abstract is here...</abstract>
<links>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
</link>
</doc>
<doc>
<title>Title of second doc is here</title>
<url>URL is here</url>
<abstract>Abstract is here...</abstract>
<links>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
<sublink>Link is here</sublink>
</link>
</doc>
</feed>

我正在尝试获取/复制每个 <doc> 的所有子项除 <links> 之外的元素添加到新的 XML 文件中元素及其子元素。

所以我希望新的 XML 文件看起来像:

<doc>
<title>Title of first doc is here</title>
<url>URL is here</url>
<abstract>Abstract is here...</abstract>
</doc>
<doc>
<title>Title of second doc is here</title>
<url>URL is here</url>
<abstract>Abstract is here...</abstract>
</doc>

对于流式处理/流式分析/流式读取原始 XML 文件,然后将其部分内容写入 PHP 中的新 XML 文件,我将不胜感激。

最佳答案

这是一个大学尝试。这假设正在使用一个文件,并且您想要写入一个文件:

<?php

$interestingNodes = array('title','url','abstract');
$xmlObject = new XMLReader();
$xmlObject->open('bigolfile.xml');

$xmlOutput = new XMLWriter();
$xmlOutput->openURI('destfile.xml');
$xmlOutput->setIndent(true);
$xmlOutput->setIndentString(" ");
$xmlOutput->startDocument('1.0', 'UTF-8');

while($xmlObject->read()){
if($xmlObject->name == 'doc'){
$xmlOutput->startElement('doc');
$xmlObject->readInnerXML();
if(array_search($xmlObject->name, $interestingNodes)){
$xmlOutput->startElement($xmlObject->name);
$xmlOutput->text($xmlObject->value);
$xmlOutput->endElement(); //close the current node
}
$xmlOutput->endElement(); //close the doc node
}
}

$xmlObject->close();
$xmlOutput->endDocument();
$xmlOutput->flush();

?>

关于php - 在 PHP 中流解析 4 GB XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18518602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com