我刚刚在当地学校找到了一个带有气象站数据的XML文件 - 最后我找到了获取当地天气的来源。
请检查文件结构http://www.zsvelkebilovice.cz:40010/xml.xml
这有点疯狂,因为没有传感器命名的标签,但有其他选项的标签。
是否有解析这样的XML的选项?相同格式使用Day One iOS应用程序在日记中存储条目 - 日期,天气,GPS和其他数据不在特定标签中但在标签选项中。
我想有一个PHP解析器使我能够通过$xml->wario->input->sensor->temperature
访问数据?因为没有像这样的解析器的唯一解决方案是计算传感器顺序并通过$wario->input->sensor[order]
访问它,如果它们不改变标签的顺序(或添加/删除一些),我就无法使用。 / p>
我可以创建自己的解析器,但我仍然认为有一个库:)
答案 0 :(得分:1)
您目前正在使用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);
输出:
float(-0.4)
array(3) {
["type"]=>
string(8) "humidity"
["name"]=>
string(8) "Humidity"
["value"]=>
float(100)
}