我有这个脚本:
<?php
$map_url = 'http://example.com/data.xml';
if (($response_xml_data = file_get_contents($map_url)) === false) {
echo "Error fetching XML\n";
} else {
libxml_use_internal_errors(true);
$data = simplexml_load_string($response_xml_data);
if (!$data) {
echo "Error loading XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
} else {
echo $data->offer->offerName;
echo "<br><br>";
echo $data->offer->links->link['href'];
echo "<br><br>";
echo $data->offer->thumbnail['image'];
}
}
?>
它加载XML中的内容,类似于:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Result xmlns="urn:buscape"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://example.com/admin/lomadee.xsd">
<offer categoryId="2493" id="104951929015047">
<offerName>BIQUINI BASICO AVELA</offerName>
<links>
<link url="http://example.com/hello" type="offer"/>
</links>
<thumbnail url="http://example.com/hello.jpg"/>
<price>
...
我需要从表中获取内容:
<offerName>
<link>
<thumbnail>
但我只能从<offerName>
获取内容。换句话说,我需要获得标题,图像和链接,但我只是获得了标题。
我做错了什么?
答案 0 :(得分:0)
首先,你没有遍历元素,但根据你的评论,这是你的意图。要执行此操作,请在foreach
上执行$data->offer
。
什么是$data->offer->thumbnail['image']
?我在image
元素中看不到任何thumbnail
,只有url
属性。如果要从元素中获取属性,请使用attributes()
,如下所示:
$offer->thumbnail[0]->attributes()->url;
对于链接,SimpleXML无法知道您正在访问哪个链接(并且预计不会知道只有一个元素)。使用数组索引访问不同的元素:
$offer->links[0]->link[0];
或者如果您特别想要URI:
$offer->links[0]->link[0]->attributes()->url;
最终代码:
foreach($data->offer as $offer)
{
$title = (string)$offer->offerName;
$thumbnail = $offer->thumbnail[0]->attributes()->url;
$uri = $offer->links[0]->link[0]->attributes()->url;
}