SimpleXMLは:XML名前空間を含むでの作業
-
19-09-2019 - |
質問
私はGoogleの-のPicasa APIオフ地理情報を取得しようとしています。これは、元のXMLです。
<georss:where>
<gml:Point>
<gml:pos>35.669998 139.770004</gml:pos>
</gml:Point>
</georss:where>
私はすでにして、ここまで来ています
$ns_geo=$item->children($namespace['georss']);
$geo=$ns_geo->children($namespace['gml']);
var_dump($geo)
が出力されます。
object(SimpleXMLElement)#34 (1) {
["Point"]=> object(SimpleXMLElement)#30 (1) {
["pos"]=> string(18) "52.373801 4.890935"
}
}
が、
echo (string)$geo->position or (string)$geo->position->pos;
私には何も与えないだろう。明らかに何かが私が間違っているのことはありますか?
解決
あなたは、XPathと
registerXPathNamespace()
にして仕事ができます>
$xml->registerXPathNamespace("georss", "http://www.georss.org/georss");
$xml->registerXPathNamespace("gml", "http://www.opengis.net/gml");
$pos = $xml->xpath("/georss:where/gml:Point/gml:pos");
ドキュメントから、重点鉱山ます:
SimpleXMLの中に名前空間を処理するために、registerXPathNamespace [...]は、次のXPathクエリ用のprefix / nsコンテキストのを作成しますの。
より多くの方法は、例えば、ここで見つけることができます。
スチュアート・ハーバートPHPで - のSimpleXMLを使用してRSSを解析するためには、
他のヒント
echo $geo->pos[0];
これは、私はXPathを使用せずにそれをやった方法です。
$georss = $photo->children('http://www.georss.org/georss');
$coords;
if($georss->count()>0) {
$gml = $georss->children('http://www.opengis.net/gml');
if($gml->count()>0) {
if(isset($gml->Point->pos)) {
$coords = $gml->Point->pos;
}
}
}
所属していません StackOverflow