我正在将大型 Wordpress 页面迁移到自定义 CMS。我需要从 Wordpress 导出的大 (20MB+) XML 文件中提取信息。
我对 PHP 下的 XML 没有任何经验,也不知道如何开始读取文件。
Wordpress 文件包含如下结构:
<excerpt:encoded><![CDATA[Encoded text here]]></excerpt:encoded>
而且我不知道如何在 PHP 中处理这个问题。
你可能会用 simplexml 做得很好:
$xml = simplexml_load_file('big_xml_file.xml');
foreach ($xml->element as $el) {
echo $el->name;
}
有关更多信息,请参见php.net
我对PHP下的XML没有任何经验
看看simplexml_load_file()
或DomDocument
。
<excerpt:encoded><![CDATA[Encoded text here]]></excerpt:encoded>
这对于 XML 解析器来说应该不是问题。但是,您会遇到 WordPress 导出的内容的问题。例如,它可以包含WordPress 短代码,它们将以原始格式出现,而不是展开。
确定您要迁移到的内容是否支持从 WordPress 功能导出。许多其他系统都可以 - Drupal、Joomla、Octopress 等。
不幸的是,您的 XML 示例没有通过。
PHP5 附带了两个用于处理 XML 的扩展——DOM和“ SimpleXML ”。
一般来说,我建议首先研究 SimpleXML,因为它是两者中更易于访问的库。
对于初学者,使用“ simplexml_load_file() ”将 XML 文件读入对象以进行进一步处理。
您还应该查看“ php.net 上的 SimpleXML 基本示例页面”。
尽管亚当是绝对正确的,但他的回答需要更多细节。这是一个简单的脚本,应该可以帮助您。
$xmlfile = simplexml_load_file('yourxmlfile.xml');
foreach ($xmlfile->channel->item as $item) {
var_dump($item->xpath('title'));
var_dump($item->xpath('wp:post_type'));
}
simplexml_load_file() 是创建对象的方法,但您还需要使用 xpath,因为 WordPress 使用名称空间。如果我没记错的话,SimpleXML 不能很好地处理名称空间,或者根本不能处理。
$xml = simplexml_load_file( $file );
$xml->xpath('/rss/channel/wp:category');
我建议查看 WordPress 用于导入文件的内容。
https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/class-wp-importer.php