首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP中使用名称空间解析XML数据

在PHP中使用名称空间解析XML数据
EN

Stack Overflow用户
提问于 2010-05-20 03:21:07
回答 3查看 6K关注 0票数 2

我正在尝试处理这个使用名称空间的XML提要,但我无法越过标记中的冒号。下面是XML提要的外观:

代码语言:javascript
运行
复制
<r25:events pubdate="2010-05-19T13:58:08-04:00">
<r25:event xl:href="event.xml?event_id=328" id="BRJDMzI4" crc="00000022" status="est">
 <r25:event_id>328</r25:event_id>
 <r25:event_name>Testing 09/2005-08/2006</r25:event_name>
 <r25:alien_uid/>
 <r25:event_priority>0</r25:event_priority>
 <r25:event_type_id xl:href="evtype.xml?type_id=105">105</r25:event_type_id>
 <r25:event_type_name>CABINET</r25:event_type_name>
 <r25:node_type>C</r25:node_type>
 <r25:node_type_name>cabinet</r25:node_type_name>
 <r25:state>1</r25:state>
 <r25:state_name>Tentative</r25:state_name>
 <r25:event_locator>2005-AAAAMQ</r25:event_locator>
 <r25:event_title/>
 <r25:favorite>F</r25:favorite>
 <r25:organization_id/>
 <r25:organization_name/>
 <r25:parent_id/>
 <r25:cabinet_id xl:href="event.xml?event_id=328">328</r25:cabinet_id>
 <r25:cabinet_name>cabinet 09/2005-08/2006</r25:cabinet_name>
 <r25:start_date>2005-09-01</r25:start_date>
 <r25:end_date>2006-08-31</r25:end_date>
 <r25:registration_url/>
 <r25:last_mod_dt>2008-02-27T14:22:43-05:00</r25:last_mod_dt>
 <r25:last_mod_user>abc00296004</r25:last_mod_user>
</r25:event>
</r25:events>

下面是我在代码中使用的代码--我将尝试将它们放入一堆数组中,这样我就可以随心所欲地格式化输出:

代码语言:javascript
运行
复制
<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://somedomain.com/blah.xml");
curl_setopt ($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

$xml = new SimpleXmlElement($output);
foreach ($xml->events->event as $entry){
  $dc = $entry->children('http://www.collegenet.com/r25');
  echo $entry->event_name . "<br />";
  echo $entry->event_id . "<br /><br />";
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-21 02:09:17

问题出在XML提要上,而不是代码上:

XML提要缺少以下行:

代码语言:javascript
运行
复制
<r25:events xmlns:r25="http://www.collegenet.com/r25" xmlns:xl="http://www.w3.org/1999/xlink" pubdate="2010-05-19T13:58:08-04:00">

不过还是谢谢你的帮助。

票数 1
EN

Stack Overflow用户

发布于 2010-05-20 03:29:16

“所有类型的错误”不是一个有帮助的描述;你实际上得到的是什么错误?

您应该为对象提供如下名称空间选项:

代码语言:javascript
运行
复制
$xml = new SimpleXmlElement($output, null, false, $ns = 'r25');

参见the manual

票数 -1
EN

Stack Overflow用户

发布于 2011-06-29 01:27:08

或者,由于r25是唯一使用的名称空间,因此没有什么特别的帮助,所以我只运行

代码语言:javascript
运行
复制
$xml = preg_replace('/r25:/','',$xml);

这就去掉了命名空间。然后,您可以使用simplexml更轻松地导航,就像您的示例中一样。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2868671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档