我正在尝试使用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的想法吗?
答案 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];
}
}
希望有帮助...