XMLsimple获取下一个元素的值

时间:2015-06-11 18:07:17

标签: php xml xml-simple

这是我正在阅读的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;

我怎样才能做到这一点?

3 个答案:

答案 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!");
希望有所帮助!