XMLsimple 获取下一个元素的值
XMLsimple get value of next element
这是我正在阅读的 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(和其他位置)的可用房间数。但是因为标识符是 Location 属性的子项,所以我很难获得正确的数据。
这是我想出来的,但显然这行不通
$hotel->Location->Identifier['D5023']->Availability->Rooms;
我怎样才能做到这一点?
有更多的位置,所以你有太多的循环:
foreach ($hotel->Location as $l) {
if ("D5023" === $l->Identifier) {
var_dump($l->Availability->Rooms);
}
}
你加载你的文件并循环遍历 XML 文件并检查 ID,不要忘记将 xml 从对象转换为字符串,这样你就可以将 2 个字符串相互比较不是字符串的对象。
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!");
希望对您有所帮助!
您可以使用 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
这是我正在阅读的 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(和其他位置)的可用房间数。但是因为标识符是 Location 属性的子项,所以我很难获得正确的数据。
这是我想出来的,但显然这行不通
$hotel->Location->Identifier['D5023']->Availability->Rooms;
我怎样才能做到这一点?
有更多的位置,所以你有太多的循环:
foreach ($hotel->Location as $l) {
if ("D5023" === $l->Identifier) {
var_dump($l->Availability->Rooms);
}
}
你加载你的文件并循环遍历 XML 文件并检查 ID,不要忘记将 xml 从对象转换为字符串,这样你就可以将 2 个字符串相互比较不是字符串的对象。
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!");
希望对您有所帮助!
您可以使用 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