我试图从大的1GB XML文件中导入数据到WordPress中。因为这是一个大文件,我做了一些研究,发现这是最好的解决方案:https://github.com/prewk/xml-string-streamer
我实现了这样一个测试脚本:
<?php
require('vendor/autoload.php');
// Convenience method for creating a file streamer with the default parser
$streamer = Prewk\XmlStringStreamer::createStringWalkerParser("mybigfile.xml");
$count = 1;
while ($node = $streamer->getNode()) {
echo $node . '<br>';
$simpleXmlNode = simplexml_load_string($node);
if( $simpleXmlNode AND $simpleXmlNode->getName() == 'book' )
{
var_dump( $simpleXmlNode );
echo (string)$simpleXmlNode->name. '<br>';
echo $count++. '<br>';
}
if( $count == 20 ) die;
}
最多10个节点,一切看起来都很好。但是在那之后,有一个<description>
元素,在它里面有一些未转义的HTML标记(例如:<div>
)。所以它会抛出错误,因为这些HTML标记。
我的XML文件看起来有点像这样:
<?xml version="1.0" encoding="UTF-8"?>
<source>
<lastBuildDate>2021-04-24</lastBuildDate>
<owner>Blahblah</owner>
<book>
<name><![CDATA[Once upon a time in coma]]></name>
<price><![CDATA[USD 20]]></price>
<listDate><![CDATA[2021-04-02]]></listDate>
<description><![CDATA[<div>This is a great book..</div>]]></description>
</book>
<book>
<name><![CDATA[Once upon a time in coma]]></name>
<price><![CDATA[USD 20]]></price>
<listDate><![CDATA[2021-04-02]]></listDate>
<description><![CDATA[<div>This is a great book..</div>]]></description>
</book>
<book>
<name><![CDATA[Once upon a time in coma]]></name>
<price><![CDATA[USD 20]]></price>
<listDate><![CDATA[2021-04-02]]></listDate>
<description><![CDATA[<div>This is a great book..</div>]]></description>
</book>
</source>
内容不总是一样的,我只是给你举个例子。我相信XML很难理解哪些是<description>
元素,因为标记中包含了HTML元素。如何动态地将HTML标记转换为HTML实体?
发布于 2021-04-24 13:10:06
尝试将expectGT
选项设置为true
。看看https://github.com/prewk/xml-string-streamer#available-options-for-the-stringwalker-parser
https://stackoverflow.com/questions/67247068
复制相似问题