这是我正在阅读的XML文件的一小部分:
<hotel>
<Location>
<Identifier>D5023</Identifier>
<IsAvailable>true</IsAvailable>
<Availability>
<TimeStamp>2015-06-11T16:04:23.887</TimeStamp>
<Rooms>525</Rooms>
<Beds>845</Beds>
</Availability>
</Location>
<Location>
ect.
</Location>
</hotel>
使用XMLsimple我想获得位置D5023(和其他位置)的可用房间数。但由于标识符是位置属性中的子标识,因此我很难获得正确的数据。
这是我提出的,但显然这不起作用
$hotel->Location->Identifier['D5023']->Availability->Rooms;
我怎样才能做到这一点?
答案 0 :(得分:1)
您可以使用SimpleXMLElement::xpath()
按复杂条件获取XML的特定部分,例如:
$xml = <<<XML
<hotel>
<Location>
<Identifier>D5023</Identifier>
<IsAvailable>true</IsAvailable>
<Availability>
<TimeStamp>2015-06-11T16:04:23.887</TimeStamp>
<Rooms>525</Rooms>
<Beds>845</Beds>
</Availability>
</Location>
<Location>
ect.
</Location>
</hotel>
XML;
$hotel = new SimpleXMLElement($xml);
$result = $hotel->xpath("/hotel/Location[Identifier='D5023']/Availability/Rooms")[0];
echo $result;
输出
525
<强> Demo 强>
答案 1 :(得分:0)
还有更多的位置,所以你太循环了:
foreach ($hotel->Location as $l) {
if ("D5023" === $l->Identifier) {
var_dump($l->Availability->Rooms);
}
}
答案 2 :(得分:0)
您加载文件并循环遍历XML文件并检查ID,不要忘记将xml从对象转换为字符串,这样您就可以将2个字符串相互比较,而不是将对象转换为字符串。 / p>
if( $xml = simplexml_load_file("path_to_xml.xml",'SimpleXMLElement', LIBXML_NOWARNING) )
{
echo("File loaded ...");
// loop through XML
foreach ($xml->hotel as $hotel)
{
// convert the xml object to a string and compare it with the room ID
if((string)$hotel->Location->Identifier == "D5023")
{
echo("there are ".$hotel->Location->Availability->Rooms."Available room in this hotel");
}
}
}
else
echo("error loading file!");
希望有所帮助!