将包含文件内容的XML数据提取到php

将包含文件内容的XML数据提取到php,php,xml,Php,Xml,我向一个API发送一个请求,该API以XML格式发送响应 响应如下所示: <ns2:HotelInformationResponse hotelId="263933"> <customerSessionId>0ABAAA85-112B-0914-9322-CA866D907EF8</customerSessionId> <HotelSummary order="0"> <hotelId>263933</hotelId> &l

我向一个API发送一个请求,该API以XML格式发送响应

响应如下所示:

<ns2:HotelInformationResponse hotelId="263933">
<customerSessionId>0ABAAA85-112B-0914-9322-CA866D907EF8</customerSessionId>
<HotelSummary order="0">
<hotelId>263933</hotelId>
<name>Nova Platinum Hotel</name>
<address1>562 Moo 10 Pratamnak Road, Nongprue</address1>
<address2>Banglamung</address2>
<city>Pattaya</city>
<postalCode>20260</postalCode>
<countryCode>TH</countryCode>
$Geosearch = 'APICALLURLHERE';
$fileContents = file_get_contents($Geosearch);
$string_data = $fileContents;
$xml = simplexml_load_string($string_data);
$hotel_id = (string) $xml->hotelId;
$hotel_name = (string) $xml->name;
echo $hotel_id.' '.$hotel_name;
我也试过这样做:

$xml = simplexml_load_file("APICALLURLHERE");
echo $xml->hotelId;
echo $xml->name; 

访问远程文件

默认情况下,fopen系列函数(包括file_get_contents和simplexml_load_file)不允许访问远程文件。这是一件非常好的事情,应该保持这种状态

如果要启用远程文件,必须更改PHP配置


XML文件中的错误

如果文件加载正常,但XML仍然无法正常工作,则可能是XML文件已损坏。您可以使用此代码段调试这些问题:

$doc = simplexml_load_string($xmlstr);
if (!$doc) {
    $errors = libxml_get_errors();

    foreach ($errors as $error) {
        echo display_xml_error($error, $xml);
    }
    libxml_clear_errors();
}

顺便说一下,它的
hotelId
不是
hotelId
。那么问题是什么呢?这是一个输入错误,但没有任何区别,更正。这是完整的回答吗?在这方面非常简单,如果我直接复制示例xml,这也是我的答案,就像您的答案一样。你必须发布完整的一个。最有可能的是,仍然有一些东西并没有发布在这里,问题更新了完整的回答;回显文件获取内容($url)整个响应都会打印出来,所以这不可能是问题所在吗?你是对的,但是我想到的另一个问题是一个损坏的XML文件。错误日志中有什么内容以及simplexml\u load\u something()的响应是什么?针对潜在的xml错误更新了答案
$doc = simplexml_load_string($xmlstr);
if (!$doc) {
    $errors = libxml_get_errors();

    foreach ($errors as $error) {
        echo display_xml_error($error, $xml);
    }
    libxml_clear_errors();
}