我具有以下XML结构:
<?xml version="1.0" encoding="utf-8"?>
<q:quakeml xmlns="http://quakeml.org/xmlns/bed/1.2" xmlns:q="http://quakeml.org/xmlns/quakeml/1.2" xmlns:catalog="http://anss.org/xmlns/catalog/0.1">
<eventParameters publicID="static">
<event catalog:eventsource="rt">
</event>
<event catalog:eventsource="rt">
</event>
<event catalog:eventsource="rt">
</event>
</eventParameters>
</q:quakeml>
我正在使用以下代码来构建一个simplexml对象,并尝试使用xpath查询提取所有事件对象:
$se = simplexml_import_dom($dom);
$se->registerXPathNamespace('q', 'http://quakeml.org/xmlns/quakeml/1.2');
$se->registerXPathNamespace('c', 'http://anss.org/xmlns/catalog/0.1');
$events = $se->xpath('//event');
显然这不起作用,但是我在做什么错。如何从此结构中获取所有事件对象?
答案 0 :(得分:1)
由于您具有文档(xmlns="http://quakeml.org/xmlns/bed/1.2"
)的默认名称空间,因此需要注册该名称空间,并为所有没有特定名称空间前缀的元素使用前缀...
$se->registerXPathNamespace('d', 'http://quakeml.org/xmlns/bed/1.2');
$events = $se->xpath('//d:event');
我倾向于使用d
-但您可以使用任何东西,只要您在XPath中使用相同的东西即可。