无法从PHP读取大型XML文件

Reg*_*00x 3 php xml-parsing

我有一个巨大的XML文件(114 KB/1719行;请参阅下面的错误消息,为什么我说巨大)我尝试阅读它,因为我之前已经完成了两个类似的文件.

其他两个文件正常加载并且大小相当,唯一的区别是所讨论的文件包含阿拉伯文本.所以这是PHP代码:

$doc3 = new DOMDocument('1.0', 'utf-8');
$doc3->load($masternumber.'.xml');
Run Code Online (Sandbox Code Playgroud)

错误是:

警告:DOMDocument :: load()[domdocument.load]:文档中的深度过高:256在文件中使用XML_PARSE_HUGE选项:...

然后$doc3不加载文件.所以我修改了代码:

$doc3->load($masternumber.'.xml', "LIBXML_PARSEHUGE");
Run Code Online (Sandbox Code Playgroud)

我最后还有另一个警告:

警告:DOMDocument :: load()期望参数2为long,字符串在...中给出

$doc3 又空了.

这有什么问题?其他文件包含其他语言的相同文本并正确加载但不是这个?我使用的是PHP 5.3.9.

Mic*_*ski 8

使用常量,而不是字符串.

$doc3->load($masternumber.'.xml', LIBXML_PARSEHUGE);
Run Code Online (Sandbox Code Playgroud)

有关DOMDocument::load()完整详细信息,请参阅文档 第二个参数是一个长整数,表示常量列表中的选定选项.

顺便提一下,如果由于任何原因需要多个选项,可以通过将它们与按位OR运算符组合来完成 |

// Multiple options  OR'd together...
// Just FYI, not specific to your situation...
$doc3->load($masternumber.'.xml', LIBXML_PARSEHUGE|LIBXML_NSCLEAN);
Run Code Online (Sandbox Code Playgroud)

  • 我会假设他阅读了错误信息并直接在这里被勺子喂食. (3认同)
  • +1表示"使用常量,而不是字符串".-1表示答案的其余部分.-1表示没有外部参考.-1不解释为什么需要"long"而不是"string".表现不佳. (2认同)