代码之家  ›  专栏  ›  技术社区  ›  Liviu

SimpleXML对象上的xpath未返回任何内容

  •  0
  • Liviu  · 技术社区  · 6 年前

    我有以下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 回复  |  直到 6 年前
        1
  •  1
  •   Nigel Ren    6 年前

    因为您有文档的默认命名空间( 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中使用相同的东西,就可以使用任何东西。