php-如何通过id获取xml标记

时间:2018-12-12 08:47:04

标签: php xml

我有这种格式的XML

<hotels>
    <hotel>
        <id>285</id>
        <name>Alexander</name>
        <price>250 USD</price>
    </hotel>

    <hotel>
        <id>678</id>
        <name>Hilton</name>
        <price>480 USD</price>
    </hotel>                
</hotels>

如何使用PHP获取id为678的酒店名称?

3 个答案:

答案 0 :(得分:1)

使用simplexml_load_string()解析xml字符串。然后遍历hotel标记并检查id

的内容
$xml = simplexml_load_string($str);
foreach($xml->hotel as $hotel)
    $hotel->id == "678" ? @$name = (string)$hotel->name : '';
echo $name;

demo中查看结果


如果您不想使用foreach,也可以使用DOMXpath

$doc = new DOMDocument();
$doc->loadXML($str);
$name = (new DOMXpath($doc))->query("//hotel[id[text()='678']]/name")[0]->nodeValue;
// Hilton

demo中查看结果

答案 1 :(得分:0)

我希望这是您要寻找的东西:

$xmlstr = <<<XML
<hotels>
    <hotel>
        <id>285</id>
        <name>Alexander</name>
        <price>250 USD</price>
    </hotel>

    <hotel>
        <id>678</id>
        <name>Hilton</name>
        <price>480 USD</price>
    </hotel>                
</hotels>
XML;

$hotel = new SimpleXMLElement($xmlstr);
$list = $hotel->hotel;
$count = count($list);
while($count > 0){
    $count--;
    $id = $hotel->hotel[$count]->id;
    if($id == 678){
        $name = $hotel->hotel[$count]->name;
        echo $name;
    }
}

答案 2 :(得分:0)

您可以使用SimpleXML和XPath查找酒店,而无需使用循环。

$data ='<hotels>
    <hotel>
        <id>285</id>
        <name>Alexander</name>
        <price>250 USD</price>
    </hotel>

    <hotel>
        <id>678</id>
        <name>Hilton</name>
        <price>480 USD</price>
    </hotel>
</hotels>';

$hotel = new SimpleXMLElement($data);
$hotel678 = $hotel->xpath("//hotel[id='678']");
echo $hotel678[0]->name;