0

我有以下形式的 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;
    }
4

2 回答 2

3

我只想发布这个可怕问题的答案。对不起。

命名空间与 DOM 无关——我只是没有从元素中获取 nodeValue。

$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;
}
于 2012-06-16T10:29:43.960 回答
-1

您需要注册您的名称空间。否则 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

于 2012-06-15T00:38:04.763 回答