使用 SimpleXML 从 XML 中获取多个项目

Posted

技术标签:

【中文标题】使用 SimpleXML 从 XML 中获取多个项目【英文标题】:Get multiple items from XML with SimpleXML 【发布时间】:2014-04-21 01:05:27 【问题描述】:

我正在尝试使用以下代码从 XML 循环多个项目。

$xml = get_data('the-url');
$data = simplexml_load_string($xml);

foreach($data->item AS $item) 
    foreach($item AS $test) 
        var_dump($test);
    

XML 如下所示:

<xml>
    <item>
        <name>...</name>
        <chapter>...</chapter>
        <text>
            ...
        </text>
    </item>
    <item>
        <name>...</name>
        <chapter>...</chapter>
        <text>
            ...
        </text>
    </item>
    <item>
        <name>...</name>
        <chapter>...</chapter>
        <text>
            ...
        </text>
    </item>
    <item>
        <name>...</name>
        <chapter>...</chapter>
        <text>
            ...
        </text>
    </item>
    <item>
        <name>...</name>
        <chapter>...</chapter>
        <text>
            ...
        </text>
    </item>
</xml>

就像现在一样,var_dump($test) 会打印:

object(SimpleXMLElement)#7 (0)   object(SimpleXMLElement)#8 (0)  
object(SimpleXMLElement)#7 (0)   object(SimpleXMLElement)#8 (0)  
object(SimpleXMLElement)#7 (0)   object(SimpleXMLElement)#8 (0)  
object(SimpleXMLElement)#7 (0)   object(SimpleXMLElement)#8 (0)  
object(SimpleXMLElement)#7 (0)   object(SimpleXMLElement)#8 (0)  
object(SimpleXMLElement)#7 (0)   object(SimpleXMLElement)#8 (0)  
object(SimpleXMLElement)#7 (0)   object(SimpleXMLElement)#8 (0)   ...

我应该怎么做才能让我的代码循环所有项目并打印值?

【问题讨论】:

您当前的输出不是很可读。将var_dump() 包裹在&lt;pre&gt; 标签中以获得更漂亮的输出。 @AmalMurali 输出是一条直线,但我编辑了它:) This 是我的意思。好的。你想产生什么输出? @AmalMurali 啊哈。但是输出只会一遍又一遍地打印这些行。我想循环所有项目并从每个项目中获取值。 我只是展示了如何使用var_dump() 获得更漂亮的输出,而不是如何解决您的实际问题。 【参考方案1】:

试试这个:

$xml_content = file_get_contents('http://url/feed.xml');
$data = simplexml_load_string($xml_content);

foreach ($data->item as $item) 
    var_dump($item->bookname);

如果需要,您还可以将整个 $item 转换为数组:

foreach ($data->item as $item) 
    $itemArray = (array) $item;
    var_dump($itemArray);

当您需要先转换为字符串以返回文本值时,您正在转储对象。 另外,我认为第二个 foreach 没有做任何事情或需要,所以我删除了它。

【讨论】:

谢谢,但我收到此错误消息:Warning: simplexml_load_file(): I/O warning : failed to load external entity ...。我尝试使用我自己的函数get_data(),然后使用您上次编辑之前使用的file_get_contents()。我正在尝试加载此 XML 并获取值:labs.bible.org/api/?passage=Leviticus%2024&type=xml 答案已更新; simplexml_load_file() 似乎只适用于本地文件 var_dump($item-&gt;toString()); 给我Fatal error: Call to undefined method SimpleXMLElement::toString() in ...var_dump((string)$item); 给我string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" ... 与之前的结果相同:string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) ""。我复制粘贴了你的代码 现在看看,我已经在自己的环境中测试过了,它可以工作了。

以上是关于使用 SimpleXML 从 XML 中获取多个项目的主要内容,如果未能解决你的问题,请参考以下文章

使用 simplexml 获取 XML 文档的根节点

PHP SimpleXML解析具有多个属性的元素

使用 SimpleXML 和 PHP 通过 https 获取 XML 内容的问题 [重复]

PHP SimpleXML:提要修改

雷林鹏分享:PHP SimpleXML

simpleXML 从 CDATA 获取值 [重复]