记录一下:页面需要获取远程xml文件并处理其中的数据。
远程xml文件如下:(PS:我是用一个叫Oxygen XML Editor的编辑器写的,好用是挺好用,就是要收费,不爽~)
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- 控制台首页泡泡消息 -->
- <message>
- <title>
- 升级信息
- </title>
- <content>
- <line>
- <text>升级</text>
- <url>http:
- </line>
- <line>
- <text>支持</text>
- <url></url>
- </line>
- </content>
- </message>
一开始,用jQuery的ajax获取xml数据,然后用$(xml).find()找节点:
- $.ajax({type:"POST",url:url,dataType:'xml',async:false, success:function(xml){
- var title = $(xml).find("title").text();
- $(xml).find("line").each(function(i){
- var text = $(this).find("text").text();
- var href = $(this).find("url").text();
- });
- }
- });
后来忽然醒起,jquery跨域访问只能获取json格式的数据呀,我这个跨服务器的xml文件的访问看来是不能用jquery了,杯具~
于是我用PHP:$xmlStr = @file_get_contents($xmlfile);
如此获得的是xml文件内容合并的一个字符串,需要对这个字符串进行处理.
1.从网上搜的----js把xml字符串转换为jquery的xml对象方法:
- if($.browser.msie){
- xml = new ActiveXObject("Microsoft.XMLDOM");
- xml.async = false;
- xml.loadXML(xmlStr);
- }else{
- xml = new DOMParser().parseFromString(xmlStr,"text/xml");
- }
- alert($(xmlStr).find("title").text());
我这样照着做,却是不起效用,不知何解~~~
2.用PHP处理:
- $xmlArr = explode("/n",$xmlStr);
- foreach($xmlArr as $key => $value){
- $xmlArr[$key] = trim($value);
- if(preg_match("/<title>/",$value))$popTitle = trim($xmlArr[$key+1]);
- }
- print_r($xmlArr);
如此,对于层级比较深的xml节点,处理起来会相当麻烦.
最终的解决方案:
无意中发现php有一个类:SimpleXMLElement.
- $xml = simplexml_load_file($xmlfile);
-
- $popTitle = $xml->title;
- $len = count($xml->content->line);
- for($i = 0; $i < $len; $i++){
- $popText .= $xml->content->line[$i]->text;
- $popText .= ": <a href='".$xml->content->line[$i]->url."' target='_blank'>".$xml->content->line[$i]->url."</a>";
- }
呼~摸索出这个方案,不容易啊~
果然够菜鸟的了,要是早知道这个类,不用半天就能解决这个问题,而我却用了一天半的时间~哭~~