xml数据的获取和处理

记录一下:页面需要获取远程xml文件并处理其中的数据。

 

远程xml文件如下:(PS:我是用一个叫Oxygen XML Editor的编辑器写的,好用是挺好用,就是要收费,不爽~)

[c-sharp]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!-- 控制台首页泡泡消息 -->  
  3. <message>  
  4.   <title>  
  5.     升级信息  
  6.   </title>  
  7.   <content>  
  8.     <line>  
  9.       <text>升级</text>  
  10.       <url>http://www.baidu.com</url>  
  11.     </line>  
  12.     <line>  
  13.       <text>支持</text>  
  14.       <url></url>  
  15.     </line>  
  16.   </content>  
  17. </message>  

 

一开始,用jQuery的ajax获取xml数据,然后用$(xml).find()找节点:

[c-sharp]  view plain  copy
  1. $.ajax({type:"POST",url:url,dataType:'xml',async:false,  success:function(xml){  
  2.           var title = $(xml).find("title").text();  
  3.           $(xml).find("line").each(function(i){  
  4.                  var text = $(this).find("text").text();  
  5.                  var href = $(this).find("url").text();  
  6.          });  
  7.         }  
  8. });  

 

后来忽然醒起,jquery跨域访问只能获取json格式的数据呀,我这个跨服务器的xml文件的访问看来是不能用jquery了,杯具~

 

于是我用PHP:$xmlStr = @file_get_contents($xmlfile);

如此获得的是xml文件内容合并的一个字符串,需要对这个字符串进行处理.

1.从网上搜的----js把xml字符串转换为jquery的xml对象方法:

[c-sharp]  view plain  copy
  1. if($.browser.msie){  
  2.     xml = new ActiveXObject("Microsoft.XMLDOM");  
  3.     xml.async = false;  
  4.     xml.loadXML(xmlStr);  
  5. }else{  
  6.     xml = new DOMParser().parseFromString(xmlStr,"text/xml");  
  7. }  
  8. alert($(xmlStr).find("title").text());  

我这样照着做,却是不起效用,不知何解~~~

2.用PHP处理:

[php]  view plain  copy
  1. $xmlArr = explode("/n",$xmlStr);  
  2. foreach($xmlArr as $key => $value){  
  3.     $xmlArr[$key] = trim($value);  
  4.     if(preg_match("/<title>/",$value))$popTitle = trim($xmlArr[$key+1]);    
  5. }  
  6. print_r($xmlArr);  

如此,对于层级比较深的xml节点,处理起来会相当麻烦.

 

 

最终的解决方案:

无意中发现php有一个类:SimpleXMLElement.

[php]  view plain  copy
  1. $xml = simplexml_load_file($xmlfile);   
  2. //print_r($xml);  
  3. $popTitle = $xml->title;  
  4. $len = count($xml->content->line);  
  5. for($i = 0; $i < $len$i++){  
  6.     $popText .= $xml->content->line[$i]->text;  
  7.     $popText .= ": <a href='".$xml->content->line[$i]->url."' target='_blank'>".$xml->content->line[$i]->url."</a>";  
  8. }  

呼~摸索出这个方案,不容易啊~

果然够菜鸟的了,要是早知道这个类,不用半天就能解决这个问题,而我却用了一天半的时间~哭~~

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值