我有一个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深入研究每个placemark节点:
foreach ($kml->Document->Placemark as $placemark) {
$extendeddata = $placemark->ExtendedData;
}我需要得到<Data>节点,其中name属性与“作为区域1一样大”匹配。在NPP的XML插件中,当我只使用<ExtendedData>...</ExtendedData>节点时,这个查询返回我想要的节点://Data[@name='At Large as District 1']。但是,当我在PHP中尝试相同的查询时:
$targetnode = $extendeddata->xpath("//Data[@name='At Large as District 1']")我得到了一个空数组。我不明白为什么应该完全有效的xpath查询不返回任何信息。我是不是遗漏了什么?
发布于 2013-07-29 17:47:42
有一个结束标签错配。
将</PlaceMark>替换为</Placemark>
代码
在本例中,您必须向名称空间注册才能执行xpath。
$extendeddata = simplexml_load_string( $str );
$extendeddata->registerXPathNamespace( 'ns', 'http://www.opengis.net/kml/2.2' );
$targetnode = $extendeddata->xpath("//ns:Data[@name='At Large as District 1']");输出
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => At Large as District 1
)
[value] => AK-1
)
)希望这能有所帮助。
https://stackoverflow.com/questions/17930446
复制相似问题