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