Разбор канала KML с четырьмя квадратами с помощью simpleXML
Я пытаюсь проанализировать фид мест встречи KML из foursqare с simpleXML, но не могу получить URL-адрес вложенного места в описании. Похоже, что SimpleXML удаляет его.
В деталях:
Подача foursqare kml выглядит следующим образом:
<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);
Любые идеи, которые сохранить HTML в description
?
1 ответ
Они правы. Это неверный XML. Тем не менее, я написал обходной путь для вас с помощью регулярных выражений. Это может быть немного хакерским, но вы можете сделать только из-за того, что вам дали, так что вот оно:
$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];
}
}
Надеюсь, это поможет...