为什么我只从XML中获取部分数据?

时间:2014-06-01 01:06:32

标签: php xml simplexml

我有这个脚本:

<?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>获取内容。换句话说,我需要获得标题,图像和链接,但我只是获得了标题。

我做错了什么?

1 个答案:

答案 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;
}