在 PHP 中解析具有多个命名空间的 XML


Parsing XML with multiple namespaces in PHP

我有以下形式的XML,我想用PHP解析(我不能改变XML的格式)。SimpleXML 和 DOM 似乎都不处理不同的命名空间 - 任何人都可以给我示例代码吗?下面的代码没有给出任何结果。

    <atom:feed>
        <atom:entry>
            <atom:id />
            <otherns:othervalue />
        </atom:entry>
        <atom:entry>
            <atom:id />
            <otherns:othervalue />
        </atom:entry>
    </atom:feed>

    $doc = new DOMDocument();
    $doc->load($url);
    $entries = $doc->getElementsByTagName("atom:entry");
    foreach($entries as $entry) {
        $id = $entry->getElementsByTagName("atom:id");
        echo $id;
        $othervalue = $entry->getElementsByTagName("otherns:othervalue");
        echo $othervalue;
    }

我只想发布这个可怕问题的答案。不好意思。

命名空间与 DOM 无关 - 我只是没有从元素中获取节点值。

$doc = new DOMDocument();
$doc->load($url);
$feed = $doc->getElementsByTagName("entry");
foreach($feed as $entry) {
    $id = $entry->getElementsByTagName("id")->item(0)->nodeValue;
    echo $id;
    $id = $entry->getElementsByTagName("othervalue")->item(0)->nodeValue;
    echo $othervalue;
}

您需要注册名称空间。否则,simplexml 将忽略它们。我从PHP手册中获得的这段代码,我在自己的项目中使用了

$xmlsimple = simplexml_load_string('YOUR XML'); 
$namespaces = $xmlsimple->getNamespaces(true);
$extensions = array_keys($namespaces);
foreach ($extensions as  $extension )
{
    $xmlsimple->registerXPathNamespace($extension,$namespaces[$extension]);
}

之后,您将在$xmlsimple上使用xpath