使用 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()
包裹在<pre>
标签中以获得更漂亮的输出。
@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->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 中获取多个项目的主要内容,如果未能解决你的问题,请参考以下文章