首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xpath:通过搜索父属性获取子节点

xpath:通过搜索父属性获取子节点
EN

Stack Overflow用户
提问于 2013-07-29 17:32:03
回答 1查看 500关注 0票数 0

我有一个KML文件的谷歌地图,我想编辑。下面是一个精简的版本:

代码语言:javascript
运行
复制
<?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节点:

代码语言:javascript
运行
复制
foreach ($kml->Document->Placemark as $placemark) {
    $extendeddata = $placemark->ExtendedData;
}

我需要得到<Data>节点,其中name属性与“作为区域1一样大”匹配。在NPP的XML插件中,当我只使用<ExtendedData>...</ExtendedData>节点时,这个查询返回我想要的节点://Data[@name='At Large as District 1']。但是,当我在PHP中尝试相同的查询时:

代码语言:javascript
运行
复制
$targetnode = $extendeddata->xpath("//Data[@name='At Large as District 1']")

我得到了一个空数组。我不明白为什么应该完全有效的xpath查询不返回任何信息。我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-29 17:47:42

有一个结束标签错配。

</PlaceMark>替换为</Placemark>

代码

在本例中,您必须向名称空间注册才能执行xpath。

代码语言:javascript
运行
复制
$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']");

输出

代码语言:javascript
运行
复制
Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [name] => At Large as District 1
                )

            [value] => AK-1
        )

)

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17930446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档