使用simpleXML解析foursquare KML场地提要

时间:2011-11-06 18:06:31

标签: php simplexml kml foursquare

我正在尝试使用simpleXML解析来自foursqare的KML场地提要,但我无法获得嵌套的desctription场地网址。它看起来像simpleXML剥离它。

详细说明:

foursqare kml Feed看起来像这样:

<kml>
 <Folder>
    <name>foursquare checkin history for X</name>
    <description>foursquare checkin history for X</description>
    <Placemark>
       <name>somevenuename</name>
       <description>@<a href="/v/somevenueurl">somevenuename</a>- a foursqareshout!</description>
       <updated>Wed, 02 Nov 11 17:00:05 +0000</updated>
       <published>Wed, 02 Nov 11 17:00:05 +0000</published>
       <visibility>1</visibility>
       <Point>
         <extrude>1</extrude>
         <altitudeMode>relativeToGround</altitudeMode> 
         <coordinates>xx.xxxxxx,yy.yyyyyy</coordinates>
       </Point>
    </Placemark>
    etc ...  

我对simpleXMl的调用是......好吧,简单:
 $venue_items = simplexml_load_file($venue_kml_file);
有关在description中保留html的想法吗?

1 个答案:

答案 0 :(得分:2)

他们是对的。这是无效的XML。但是,我使用正则表达式为您编写了一个解决方法。它可能有点hacky,但你只能通过你已经给出的东西来弥补,所以这里是:

$xml_string = <<<XML_STRING
<kml>
 <Folder>
    <name>foursquare checkin history for X</name>
    <description>foursquare checkin history for X</description>
    <Placemark>
       <name>somevenuename</name>
       <description>@<a href="/v/somevenueurl">somevenuename</a>- a foursqareshout!</description>
       <updated>Wed, 02 Nov 11 17:00:05 +0000</updated>
       <published>Wed, 02 Nov 11 17:00:05 +0000</published>
       <visibility>1</visibility>
       <Point>
         <extrude>1</extrude>
         <altitudeMode>relativeToGround</altitudeMode> 
         <coordinates>xx.xxxxxx,yy.yyyyyy</coordinates>
       </Point>
    </Placemark>
 </Folder>
 <Folder>
    <name>foursquare checkin history for X</name>
    <description>foursquare checkin history for X</description>
    <Placemark>
       <name>somevenuename</name>
       <description>@<a href="/v/somevenueurl222">somevenuename</a>- a foursqareshout!</description>
       <updated>Wed, 02 Nov 11 17:00:05 +0000</updated>
       <published>Wed, 02 Nov 11 17:00:05 +0000</published>
       <visibility>1</visibility>
       <Point>
         <extrude>1</extrude>
         <altitudeMode>relativeToGround</altitudeMode> 
         <coordinates>xx.xxxxxx,yy.yyyyyy</coordinates>
       </Point>
    </Placemark>
 </Folder>
</kml>    

XML_STRING;


preg_match_all( '%<Placemark>(.*?)</Placemark>%s', $xml_string, $placemarks, PREG_SET_ORDER );
for( $x = 0; $x < sizeof($placemarks); $x++ ){
    preg_match_all('%<description>(.*?)</description>%s', $placemarks[$x][1], $descriptions, PREG_SET_ORDER );
    for( $y = 0; $y < sizeof($descriptions); $y++ ){
        echo $descriptions[$y][1];
    }
}

希望有帮助...