1

我正在将大型 Wordpress 页面迁移到自定义 CMS。我需要从 Wordpress 导出的大 (20MB+) XML 文件中提取信息。

  1. 我对 PHP 下的 XML 没有任何经验,也不知道如何开始读取文件。

  2. Wordpress 文件包含如下结构:

    <excerpt:encoded><![CDATA[Encoded text here]]></excerpt:encoded>
    

而且我不知道如何在 PHP 中处理这个问题。

4

5 回答 5

3

你可能会用 simplexml 做得很好:

$xml = simplexml_load_file('big_xml_file.xml');
foreach ($xml->element as $el) {
    echo $el->name;
}

有关更多信息,请参见php.net

于 2013-01-08T18:05:09.660 回答
1

我对PHP下的XML没有任何经验

看看simplexml_load_file()DomDocument

<excerpt:encoded><![CDATA[Encoded text here]]></excerpt:encoded>

这对于 XML 解析器来说应该不是问题。但是,您会遇到 WordPress 导出的内容的问题。例如,它可以包含WordPress 短代码,它们将以原始格式出现,而不是展开。

更好的方法

确定您要迁移到的内容是否支持从 WordPress 功能导出。许多其他系统都可以 - Drupal、Joomla、Octopress 等。

于 2013-01-08T18:06:11.400 回答
1

不幸的是,您的 XML 示例没有通过。

PHP5 附带了两个用于处理 XML 的扩展——DOM和“ SimpleXML ”。
一般来说,我建议首先研究 SimpleXML,因为它是两者中更易于访问的库。

对于初学者,使用“ simplexml_load_file() ”将 XML 文件读入对象以进行进一步处理。
您还应该查看“ php.net 上的 SimpleXML 基本示例页面”。

于 2013-01-08T18:23:07.910 回答
1

尽管亚当是绝对正确的,但他的回答需要更多细节。这是一个简单的脚本,应该可以帮助您。

$xmlfile  = simplexml_load_file('yourxmlfile.xml');
foreach ($xmlfile->channel->item as $item) {
    var_dump($item->xpath('title'));
    var_dump($item->xpath('wp:post_type'));
}
于 2019-10-14T01:10:49.717 回答
-1

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

于 2014-04-09T05:16:36.470 回答