【问题标题】:XML multidimentional array php from URL [duplicate]来自URL的XML多维数组php [重复]
【发布时间】:2015-05-15 14:46:54
【问题描述】:

我已经为这个问题头疼了 2 天了,所以我希望有人能提供一些帮助。

我需要来自网站的 XML 数据。该代码返回一个不错的列表,但缺少时间数组(数组中的数组)。 这是我的代码:

<?php 
$url="http://publications.elia.be/Publications/Publications/WindForecasting.v1.svc/GetForecastGraphDataXml?beginDate=2015-05-13&endDate=2015-05-18&isOffshore=&isEliaConnected=";
echo $url;

$sxml = Simplexml_load_file($url);
var_dump($sxml);
foreach ($sxml ->ForecastGraphItems ->WindForecastingGraphItem as $type){
    echo 'FC ';
    echo $type ->Forecast."<br>";
    echo 'LF ';
    echo $type ->LoadFactor."<br>";
    echo 'DT ';
    echo $type ->Time[0]->DateTime;
    echo "<br>";
    echo 'BID ';
    echo $type ->Bid."<br>";
    echo 'RA '; 
    echo $type ->RunningAverage."<br>";
    echo "<br>";
}
?>

我手动打开网站时得到的 XML 格式如下所示,或查看原始网站:http://publications.elia.be/Publications/Publications/WindForecasting.v1.svc/GetForecastGraphDataXml?beginDate=2015-05-13&endDate=2015-05-18&isOffshore=&isEliaConnected=

<?xml version="1.0" encoding="UTF-8"?>

<WindForecastingGraphDataResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Elia.PublicationService.DomainInterface.WindForecasting.v1">

    <ErrorMessage i:nil="true"/>
    <ForecastGraphItems>
        <WindForecastingGraphItem>
            <Bid>No</Bid>
            <Forecast>571.45</Forecast>
            <LoadFactor>0.32</LoadFactor>
            <RunningAverage>585.59</RunningAverage>
            <Time xmlns:a="http://schemas.datacontract.org/2004/07/System">
                <a:DateTime>2015-05-12T22:00:00Z</a:DateTime>
                <a:OffsetMinutes>120</a:OffsetMinutes>
            </Time>
        </WindForecastingGraphItem>
        <WindForecastingGraphItem>
            <Bid>No</Bid>
            <Forecast>562.95</Forecast>
            <LoadFactor>0.32</LoadFactor>
            <RunningAverage>578.47</RunningAverage>
            <Time xmlns:a="http://schemas.datacontract.org/2004/07/System">
                <a:DateTime>2015-05-12T22:15:00Z</a:DateTime>
                <a:OffsetMinutes>120</a:OffsetMinutes>
            </Time>

现在,当我 var_dump($sxml),或者如果我尝试获取它时,TIME 的子数组退出了......(见下文)。 我还尝试了foreach ($sxml -&gt;ForecastGraphItems -&gt;WindForecastingGraphItem -&gt; Time as $time){ ...,它有效,但返回为空。

任何人都可以帮助为什么'时间'数组是空的?

var_dump 的回声下方:

http://publications.elia.be/Publications/Publications/WindForecasting.v1.svc/GetForecastGraphDataXml?beginDate=2015-05-13&endDate=2015-05-18&isOffshore=&isEliaConnected=object(SimpleXMLElement)#1 (2) { ["ErrorMessage"]=> 对象(SimpleXMLElement)#2 (0) { } ["ForecastGraphItems"]=> 对象(SimpleXMLElement)#3 (1) { ["WindForecastingGraphItem"]=> 数组(481) { [0]=> object(SimpleXMLElement)#4 (5) { ["Bid"]=> string(2) "No" ["预测"]=> 字符串(6) "571.45" ["LoadFactor"]=> 字符串(4) "0.32" ["RunningAverage"]=> 字符串(6) "585.59" ["Time"]=> 对象(SimpleXMLElement)#485 (0) { } } [1]=> object(SimpleXMLElement)#5 (5) { ["Bid"]=> string(2) "No" ["预测"]=> 字符串(6) "562.95" ["LoadFactor"]=> 字符串(4) "0.32" ["RunningAverage"]=> 字符串(6) "578.47" ["Time"]=> 对象(SimpleXMLElement)#485 (0) { } }

【问题讨论】:

  • 是因为&lt;a:DateTime&gt;中的命名空间a

标签: php arrays xml


【解决方案1】:

正如 michi 已经评论的那样,您希望访问不同命名空间中的元素:

            <Time xmlns:a="http://schemas.datacontract.org/2004/07/System">
                <a:DateTime>2015-05-12T22:15:00Z</a:DateTime>
                <a:OffsetMinutes>120</a:OffsetMinutes>
            </Time>

&lt;Time&gt; 元素为其所有子元素设置前缀 a 到 XML 命名空间 http://schemas.datacontract.org/2004/07/System。您对具有该前缀的两个孩子感兴趣:

                <a:DateTime>2015-05-12T22:15:00Z</a:DateTime>
                <a:OffsetMinutes>120</a:OffsetMinutes>

您可以通过告诉您感兴趣的孩子的命名空间来做到这一点,例如对于第一个元素:

$type ->Time->children('http://schemas.datacontract.org/2004/07/System')->DateTime;

就是这样。

现在纠正一些误解:

  • 这不是一个数组
  • 是的,var_dump 告诉过你这是一个,但事实并非如此。
  • var_dumpprint_r 对于 SimpleXMLElement 并不是特别有用,因为它们会撒谎。 SimpleXMLElement::asXML() 始终向您展示具体的 XML。

【讨论】:

  • 确实这是解决方案!
  • 嗨@dwindey1:由于您是新用户,请在此处快速了解接受答案的工作原理(Stackoverflow 投票系统的一部分):Meta: How does accepting an answer work?
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 2019-02-27
  • 2016-06-25
相关资源
最近更新 更多