Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php XML到关联数组并回显特定值_Php_Xml_Arrays_Associative Array_Associative - Fatal编程技术网

Php XML到关联数组并回显特定值

Php XML到关联数组并回显特定值,php,xml,arrays,associative-array,associative,Php,Xml,Arrays,Associative Array,Associative,我不确定我的方法是否正确,但我试图从数组中回传出单个数据元素,但没有成功,我只需要从XML文件中获取大约10个平均燃油消耗量变量: 我只需要make、model、year avgMpg,它是youMpgVehicle等的子对象,这样我就可以将它们放在一个表中,就像您可以在PHP中回显SQL数据一样 function download_page($path){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$path); curl_setopt($

我不确定我的方法是否正确,但我试图从数组中回传出单个数据元素,但没有成功,我只需要从XML文件中获取大约10个平均燃油消耗量变量:

我只需要make、model、year avgMpg,它是youMpgVehicle等的子对象,这样我就可以将它们放在一个表中,就像您可以在PHP中回显SQL数据一样

function download_page($path){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$path);
curl_setopt($ch, CURLOPT_FAILONERROR,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
//curl_setopt($ch, CURLOPT_SSLVERSION,3); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

$retValue = curl_exec($ch);          
curl_close($ch);
return $retValue;
}

$sXML = download_page('https://www.fueleconomy.gov/ws/rest/ympg/shared/vehicles?make=honda&model=civic');
$oXML = new SimpleXMLElement($sXML);

$dom = new DomDocument();
$dom->loadXml($sXML);
$dataElements = $dom->getElementsByTagName('vehicle');
$array = array();
foreach ($dataElements as $element) {
$subarray = array();
foreach ($element->childNodes as $node) {
    if (!$node instanceof DomElement) {
        continue;
    }
    $key = $node->tagName;
    $value = $node->textContent;
    $subarray[$key] = $value;
 }
 $array[] = $subarray;
 // var_dump($array);  // returns the array as expected

var_dump($array[0]["barrels08"]); //how can I get this and other variables?


}
结构如下:(或者你可以点击上面的超链接)

-
-
10.283832
0
0
0
28
28.0743
0
0
0
0
0
279
-1
0
279
32
31.9768
0
0
0
0
0
4.
1.8
前轮驱动
18
8.
1550
0
有规律的
8.
-1
39
38.5216
0
0
0
0
0
0
0
33504
12
12
本田
HNX
公民的
Y
错误的
83
95
0
0
自动5-spd
36.4794
0
55.5375
0
小型车
2013
3000
- 33.612226599 45 55 47 28 16 33504

如果只想显示数据,实际上不需要将所有内容都放入数组中。SimpleXML使处理XML数据变得非常简单。如果我可以建议一个可能不那么复杂的解决方案:

<?php

function getFuelDataAsXml($make, $model)
{
  // In most cases CURL is overkill, unless you need something more complex
  $data = file_get_contents("https://www.fueleconomy.gov/ws/rest/ympg/shared/vehicles?make={$make}&model={$model}");

  // If we got some data, return it as XML, otherwise return null       
  return $data ? simplexml_load_string($data) : null;
}

// get the data for a specific make and model
$data = getFuelDataAsXml('honda', 'civic');

// iterate over all vehicle-nodes
foreach($data->vehicle as $vehicleData)
{
  echo $vehicleData->barrels08 . '<br />';
  echo $vehicleData->yourMpgVehicle->avgMpg . '<br />';
  echo '<hr />';
}
车辆作为$vehicleData)
{
echo$vehicleData->barrels08.“
”; echo$vehicleData->yourMpgVehicle->avgMpg.“
”; 回声“
”; }
要从DOM获取数据,请使用Xpath:

$url = "https://www.fueleconomy.gov/ws/rest/ympg/shared/vehicles?make=honda&model=civic";

$dom = new DomDocument();
$dom->load($url);
$xpath = new DOMXpath($dom);

foreach ($$xpath->evaluate('/*/vehicle') as $vehicle) {
  var_dump(         
    array(
      $xpath->evaluate('string(fuelType)', $vehicle),
      $xpath->evaluate('number(fuelCost08)', $vehicle),
      $xpath->evaluate('number(barrels08)', $vehicle)
    )
  ); 
}

大多数Xpath表达式返回可以使用foreach迭代的节点列表。使用
number()
string()
将第一个节点的值或内容强制转换为浮点或字符串。如果列表为空,您将得到一个空值。

此代码按预期工作<代码>变量转储($array[0][“barrels08”])转储正确的数据。你的问题是什么?是的,这似乎可行,但如果你将其更改为var_dump($array[0][“barrelsA08]”);下一个节点不是,除非我出错。将0更改为1、2、3等似乎也没有什么不同。谢谢,这看起来正是我想要的!非常感谢你的帮助@用户3270591很高兴我能帮忙:)
$url = "https://www.fueleconomy.gov/ws/rest/ympg/shared/vehicles?make=honda&model=civic";

$dom = new DomDocument();
$dom->load($url);
$xpath = new DOMXpath($dom);

foreach ($$xpath->evaluate('/*/vehicle') as $vehicle) {
  var_dump(         
    array(
      $xpath->evaluate('string(fuelType)', $vehicle),
      $xpath->evaluate('number(fuelCost08)', $vehicle),
      $xpath->evaluate('number(barrels08)', $vehicle)
    )
  ); 
}