2013年10月14日星期一

求救,用SimpleXML读不出namespace里的值

我在尝试用simpleXML来解析atom1.0格式里的数据,结果遇到了读不出数据的问题。

下面是atom的源代码:
<atom:id gr:original-id="http://huijia.org/?p=30">tag:google.com,2005:reader/item/524195038eba942c</atom:id>

上面的代码里有两个名称空间(namespace),一个是gr

'gr' => 'http://www.google.com/schemas/reader/atom/',
另一个是atom
'atom' => 'http://www.w3.org/2005/Atom'


我想把original-id的值读出来,也就是要读到 http://huijia.org/?p=30 的值,这个值实际上是blog的永久链接,但我尝试多个办法都失败了,不过我能用print_r()打印出来




echo '<pre>';
print_r($details->id->children('http://www.google.com/schemas/reader/atom/'));
echo '</pre>';


显示结果如下:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [original-id] => http://huijia.org/?p=30
        )

)
我尝试用 
$temmppp =  $details->id->children('http://www.google.com/schemas/reader/atom/');
echo $temmppp->{"original-id"};
echo $temmppp["original-id"];
都无法输出永久链接的地址。

whentp 教我转换对象为数组的办法:
$tmp = (array)($temmppp->attributes());
echo $tmp["original-id"];
也无法取得正确的数值。


不过,同样的方法却在另一个
<atom:link href="http://huijia.org" rel="alternate" type="text/html"/>
命名空间的属性值能读出来。
echo $entry->children('http://www.w3.org/2005/Atom')->link->attributes()->href;

打印
print_r( $details->link->attributes());
的结果也跟前面的差不多啊,


SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [href] => http://huijia.org/2009/01/20/hanleiquanmaihuochepiaodepimin/
            [rel] => alternate
            [type] => text/html
        )

)


怎么用一样的方法在这里能读出数值呢,在前面那个情况下却读不出来呢?这是怎么回事呢?求高人指点。


仍然搜索不到结果,我把这个问题发到 http://stackoverflow.com/questions/19372302/cant-get-namespace-original-id-value-by-simplexml 



来都来了,抢个沙发,给点精神鼓励吧!求你啦!

发表评论