xml数据的获取和处理

来源:互联网 发布:北京理工大学 网络教育 编辑:程序博客网 时间:2024/05/18 22:47

记录一下:页面需要获取远程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
原创粉丝点击