編集したい Google マップの KML ファイルがあります。以下は、簡略化されたバージョンです。
<?xml version='1.0' encoding='UTF-8'?>
<kml xmlns='http://www.opengis.net/kml/2.2'>
<Document>
<Placemark>
<name>00</name>
<snippet></snippet>
<description><![CDATA[]]></description>
<styleUrl>#Style0-polygon-3-map</styleUrl>
<ExtendedData>
<Data name='Two-Digit Districts'>
<value>AK-00</value>
</Data>
<Data name='Standard Districts'>
<value>AK-AL</value>
</Data>
<Data name='At Large as District 1'>
<value>AK-1</value>
</Data>
<Data name='Full District Name'>
<value>Alaska At Large</value>
</Data>
<Data name=''>
<value>AK</value>
</Data>
</ExtendedData>
</PlaceMark>
</Document>
</kml>
私の PHP コードでは、SimpleXML を使用して各目印ノードを掘り下げています。
foreach ($kml->Document->Placemark as $placemark) {
$extendeddata = $placemark->ExtendedData;
}
属性が「At Large as District 1」に一致する<Data>
ノードを取得する必要があります。name
NPP の XML ツール プラグインで、<ExtendedData>...</ExtendedData>
ノードだけを取得すると、このクエリは必要なノードを返します: //Data[@name='At Large as District 1']
. ただし、PHP で同じクエリを実行すると、次のようになります。
$targetnode = $extendeddata->xpath("//Data[@name='At Large as District 1']")
空の配列を取得します。完全に有効な xpath クエリが情報を返さない理由がわかりません。何か不足していますか?