php dom 查询,php – DOM XPath查询帮助

所以这个xpath查询让我抓狂.我正在尝试做的是搜索特定课程类型的高尔夫球场的xml文件(在这种情况下是与谷歌地图api一起使用的kml文件)并抓取每个匹配的< Placemark>元素,以便我可以创建一个新的xml对象与结果,以便我可以进一步使用新查询进行过滤.问题是我似乎无法弄清楚如何获得每个匹配< Placemark>元件

$xml = '<?xml version="1.0" encoding="UTF-8"?>

Test Country Club

Post Office Box 329 website

]]>

a

2

Public/Daily Fee

#nineholeStyle

-79.285576,37.111809

';

$dom = new DOMDocument();

$dom->loadXML($xml);

$xpath = new DOMXPath($dom);

//trying to get any Placemark element where type child matches a specific query

//in this case we want to search for Public/Daily Fee and return the placemark and everything inside it.

$query = $xpath->query("//Placemark[type='Public/Daily Fee']/ancestor::Placemark");;

foreach ($query as $result) {

//eventually want to merge each result into new xml object to be further filtered

}

任何帮助将不胜感激.谢谢

解决方法:

// register it

$xpath->registerNamespace('kml', "http://earth.google.com/kml/2.1");

// and use it, too !

$query = $xpath->query("//kml:Placemark[kml:type='Public/Daily Fee']");

(祖先:: kml:你的表达中的地标毫无意义,我把它留了出来.)

即使所讨论的命名空间是XML文档的默认命名空间(如您的情况),也必须使用XPath查询中的命名空间前缀.

元素< kml xmlns =“http://earth.google.com/kml/2.1”>相当于< kml:kml xmlns:kml =“http://earth.google.com/kml/2.1”>.

但是,/ kml的XPath查询不等于/ kml:kml.后者将匹配两个元素(当事先注册kml命名空间时),无论你做什么,前者都不匹配它们.

另请注意,您不需要使用XML文档中使用的相同名称空间前缀.

假设XML文档是这样的:

然后你仍然可以这样做:

$xpath->registerNamespace('foo', "http://earth.google.com/kml/2.1");

$query = $xpath->query("/foo:kml/foo:Document");

并获得正确的结果.命名空间前缀只是一种简写.

标签:php,dom,xpath

来源: https://codeday.me/bug/20190726/1543690.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值