simplexml 对象上的 xpath returns 无

xpath on simplexml object returns nothing

我有以下 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');

显然这不起作用,但我做错了什么。如何从此结构中获取所有事件对象?

由于您的文档有默认名称空间 (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 中使用相同的东西即可。