2010-01-20 121 views
5

傍晚的家伙。PHP命名空间simplexml问题

首先要说的是,我已经读了How do I parse XML containing custom namespaces using SimpleXML?

我正在解析来自源的XML文档,不介意,他们使用自定义名称空间。

<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0" xmlns:moshtix="http://www.moshtix.com.au"> 
    <channel> 
    <item> 
    <link>qweqwe</link> 
    <moshtix:genre>asdasd</moshtix:genre> 
... 

例如。当我使用SimpleXML进行分析时,没有一个mostix:namespace元素显示或可访问。可能是一个非常简单的解决方案,但任何想法家伙?

回答

6

通常,人们使用children()

$rss = simplexml_load_string(
    '<?xml version="1.0" encoding="utf-8"?> 
    <rss version="2.0" xmlns:moshtix="http://www.moshtix.com.au"> 
     <channel> 
      <link>qweqwe</link> 
      <moshtix:genre>asdasd</moshtix:genre> 
     </channel> 
    </rss>' 
); 

foreach ($rss->channel as $channel) 
{ 
    echo 'link: ', $channel->link, "\n"; 
    echo 'genre: ', $channel->children('moshtix', true)->genre, "\n"; 
} 
+0

虽然这适用于提取每个元素,这是有帮助的,相当多的,我需要进行json_encode,只是捆绑了每一个人有效的项目,并将它们存储在数据库中的时间。但是当我这样做时,它不能识别自定义命名空间项目。有任何想法吗?每个内部的数据变化太大,以至于无法手动输入每个数据。 – James 2010-01-20 02:49:20

+0

设法用一些foreach扫描每一个元素来修复它;) – James 2010-01-20 03:02:25

+1

当人们说他们将XML转换成JSON而不想关心结构时,它总是让我觉得有些轻浮。为什么不把它存储为XML呢? – IMSoP 2013-05-19 15:08:16