Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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解析来自weatherstation的数据_Php_Xml - Fatal编程技术网

使用PHP解析来自weatherstation的数据

使用PHP解析来自weatherstation的数据,php,xml,Php,Xml,我刚刚找到了一个XML文件,其中包含本地学校的气象站数据——最后我得到了一个获取本地天气的源 请检查文件结构 这有点疯狂,因为没有传感器命名的标签,而是带有另一个选项的标签 有没有像这样解析XML的选项?同样的格式使用DayOne iOS应用程序在日记中存储条目——日期、天气、GPS和其他数据不在特定的标签中,而是在标签选项中 我假设有一个PHP解析器,它使我能够通过$xml->wario->input->sensor->temperature访问数据?因为没有这样的解析器的唯一解决方案是计算传

我刚刚找到了一个XML文件,其中包含本地学校的气象站数据——最后我得到了一个获取本地天气的源

请检查文件结构

这有点疯狂,因为没有传感器命名的标签,而是带有另一个选项的标签

有没有像这样解析XML的选项?同样的格式使用DayOne iOS应用程序在日记中存储条目——日期、天气、GPS和其他数据不在特定的标签中,而是在标签选项中

我假设有一个PHP解析器,它使我能够通过
$xml->wario->input->sensor->temperature
访问数据?因为没有这样的解析器的唯一解决方案是计算传感器顺序并通过
$wario->input->sensor[order]
访问它,如果他们不更改标记的顺序(或添加/删除一些),我就无法使用


我可以创建自己的解析器,但我仍然认为有一个用于此的库:)

您目前正在使用SimpleXML。SimpleXML有一个xpath()方法,允许您获取元素。这封装了来自DOM的Xpath对象。DOMXpath::evaluate()允许您直接提取值

// stripped down xml for testing
$xml = <<<'XML'
<wario><input>
  <sensor>
   <type>humidity</type><id>1011</id><name>Humidity</name><value>100.0</value>
  </sensor>
  <sensor>
    <type>pressure</type><id>1012</id><name>Pressure</name><value>1011.0</value>
  </sensor>
  <sensor>
    <type>temperature</type><id>1025</id><name>T285b30061</name><value>-0.4</value>
  </sensor>
</input></wario>
XML;

// some bootstrap    
$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);

// fetch the value of the first temperature sensor
$temperature = $xpath->evaluate('number(//sensor[type = "temperature"]/value)');

// fetch sensors with the id 1011
$sensors = $xpath->evaluate('//sensor[id = 1011]');
// get the first one
$sensor = $sensors->item(0);
// get some data from the sensor node
$data = array(
 'type' => $xpath->evaluate('string(type)', $sensor),
 'name' => $xpath->evaluate('string(name)', $sensor),
 'value' => $xpath->evaluate('number(value)', $sensor)
);

var_dump($temperature, $data);

您好,是的,这看起来非常简单,使用XML解析器可以以您显示的格式为您提供数据。我会检查它,谢谢大家。当我搜索时,我总是忘记使用简单的关键字,比如“PHP中的XML”:DI必须使用XPath,对吗?或者我怎样才能找到我想要的带传感器的标签?谢谢!我想要其他东西,但我认为它不存在,解决方案是XPath。我会读更多关于它的内容+1.
float(-0.4)
array(3) {
  ["type"]=>
  string(8) "humidity"
  ["name"]=>
  string(8) "Humidity"
  ["value"]=>
  float(100)
}