如何使用SimpleXML解析包含自定义命名空间的XML?

时间:2009-07-15 20:40:36

标签: php xml namespaces

我想知道如何在XML中解析看起来具有的值:在他们的名字中。我一直在用:

$response   = file_get_contents($url);
$data = simplexml_load_string($response);
然后做一个:

foreach($data->item as $key => $current){

但是,我给出的最新Feed之一在Feed名称中有冒号,如下例所示:

<item>
  <title>foo</title>
  <description>foo</description>           
  <ccc:fid>10</ccc:fid>
  <ccc:bid>6</ccc:bid>
 </item>

当我尝试创建一个$ current-&gt; ccc:bid php并不高兴(理所当然)。有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:3)

冒号的元素使用namespace prefixes,它是完全有效的XML。在一起使用多个模式时,名称空间有助于区分具有相同名称的元素。 PHP中的SimpleXMLElement对象处理它的方式,你基本上可以忽略冒号之前的部分:

$current->fid;

如果您想查找元素名称的命名空间部分,可以执行以下操作:

$current->fid->getNamespaces();

答案 1 :(得分:2)

ccc的用法:fid是命名空间的扩展,需要在xml中声明,以便能够在像simplexml这样的库中使用它。

以下是名称空间中使用说明的一些示例:

希望有所帮助,尽管它有点复杂。

答案 2 :(得分:2)

“ccc”是一个命名空间 - 你应该能够做到

$current->fid