通过属性simplexml获取值

时间:2017-01-18 18:43:08

标签: php xml simplexml

我有这段代码在我的网页上显示xml表中的一些值:

<?php
$xml=simplexml_load_file("http://www.arso.gov.si/xml/vode/hidro_podatki_zadnji.xml") or die("Error: Cannot create object");
echo "Merilno mesto: ".$xml->postaja[126]->merilno_mesto."<br>";
echo "Datum/ura: ".$xml->postaja[126]->datum."<br>";
echo "Vodostaj: ".$xml->postaja[126]->vodostaj." cm"."<br>";
echo "Pretok: ".$xml->postaja[126]->pretok." m<sup>3</sup>/s";
echo " - ".$xml->postaja[126]->pretok_znacilni."<br>";
echo "Temperatura vode: ".$xml->postaja[126]->temp_vode."&#x2103;";
?>

我使用元素编号126在我的网页上显示一些特定值。这工作正常,但问题是xml文件中的行顺序并不总是相同。因此,我希望通过特定属性获取值,我认为最好的属性是&#34; sifra&#34;。您可以在上面的代码块中查看url中的xml文件。

抱歉,我是一个新手,我也搜索了问题,但我还没有得到任何我理解的东西。换句话说,根据我的代码,所有答案对我来说都太复杂了,这很简单。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用XPath按属性获取具有特定值的节点。您可以使用方法SimpleXMLElement::xpath像使用XPath(而不是SQL)的数据库一样查询XML文件。

//load the xml file.
$xml=simplexml_load_file("http://www.arso.gov.si/xml/vode/hidro_podatki_zadnji.xml") or die("Error: Cannot create object");

//select a node with name "postaja" on parent with name "arsopodatki"
//where attribute "sifra" on node "postaja" has the value "1165". 
$xmlNodes = $xml->xpath('/arsopodatki/postaja[@sifra="1165"]');

//is there a node?
if (count($xmlNodes) < 1) {
    die('Node not found!'); //No
} else {
    $xmlNode = $xmlNodes[0]; //Yes
    echo "Merilno mesto: ".$xmlNode->merilno_mesto."<br>";
    echo "Datum/ura: ".$xmlNode->datum."<br>";
    echo "Vodostaj: ".$xmlNode->vodostaj." cm"."<br>";
    echo "Pretok: ".$xmlNode->pretok." m<sup>3</sup>/s";
    echo " - ".$xmlNode->pretok_znacilni."<br>";
    echo "Temperatura vode: ".$xmlNode->temp_vode."&#x2103;";
}