simplexml对象上的xpath不返回任何内容

时间:2018-11-20 14:53:20

标签: php xml xpath simplexml

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

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

1 个答案:

答案 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中使用相同的东西即可。