Chinaunix首页 | 论坛 | 博客
  • 博客访问: 925462
  • 博文数量: 264
  • 博客积分: 10107
  • 博客等级: 上将
  • 技术积分: 2455
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-09 16:34
文章分类

全部博文(264)

文章存档

2012年(1)

2011年(11)

2010年(128)

2009年(82)

2008年(42)

我的朋友

分类: 系统运维

2010-09-10 14:07:11

 

前几天用jQuery解析XML内容,发现直接将字符串放到$()中会引起问题,而先用上面的这段代码将字符串可靠的转成一个document对象再交给jQuery可以产生正确的jquery对象。

 

 function create_doc(text){

var xmlDoc = null;

try //Internet Explorer

{

 xmlDoc=new ActiveXObject("Microsoft.XMLDOM");

 xmlDoc.async="false";

 xmlDoc.loadXML(text);

}

catch(e)

{

 try //Firefox, Mozilla, Opera, etc.

   {

   parser=new DOMParser();

   xmlDoc=parser.parseFromString(text,"text/xml");

   }

 catch(e) {}

}

return xmlDoc;

}

先给一个函数,做什么用的?看了就知道。

  1. function loadXML(xmlpath){
  2.  var xmlDoc = null;
  3.  if (window.ActiveXObject){
  4.   xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  5.  }else
  6.  if (document.implementation && document.implementation.createDocument){
  7.   xmlDoc = document.implementation.createDocument("","",null);
  8.  }else{
  9.   alert('Your browser cannot handle this script.');
  10.  }
  11.  xmlDoc.async = false;
  12.  xmlDoc.load(xmlpath);
  13.  return xmlDoc;
  14. }

这个函数首先根据用户的浏览器类型来创建一个合适的xml对象xmlDoc,对象创建了之后,接下来应该是导入xml文档了,”xmlDoc.load(xmlpath);”,xmlpath就是你的xml文档的路径了,这样第一步就已经完成了。

下面是我写的一个xml文档:

  1. xml version="1.0" encoding="utf-8"?>
  2. <location id="location">
  3.  <country id="1" name="中国大陆地区" path="chinabase">
  4.   <province id="1" name="北京" path="beijing">
  5.    <city id="1" name="东城" path="easttown">city>
  6.    <city id="2" name="西城" path="westtown">city>
  7.    <city id="3" name="崇文" path="chongwen">city>
  8.    <city id="4" name="宣武" path="xuanwu">city>
  9.    <city id="5" name="朝阳" path="chaoyang">city>
  10.    <city id="6" name="丰台" path="fengtai">city>
  11.    <city id="7" name="石景山" path="shijingshan">city>
  12.    <city id="8" name="海淀" path="haidian">city>
  13.   province>
  14.   <province id="2" name="天津" path="tianjin">
  15.    <city id="101" name="和平" path="heping">city>
  16.    <city id="102" name="河东" path="hedong">city>
  17.    <city id="103" name="河西" path="hexi">city>
  18.    <city id="104" name="南开" path="nankai">city>
  19.    <city id="105" name="河北" path="hebei">city>
  20.    <city id="106" name="红桥" path="hongqiao">city>
  21.    <city id="107" name="塘沽" path="tanggu">city>
  22.    <city id="108" name="汉沽" path="hangu">city>
  23.   province>
  24.   <province id="3" name="河北" path="hebei">
  25.    <city id="201" name="石家庄" path="shijiazhuang">city>
  26.    <city id="202" name="唐山" path="tangshan">city>
  27.    <city id="203" name="秦皇岛" path="qinhuangdao">city>
  28.    <city id="204" name="邯郸" path="handan">city>
  29.    <city id="205" name="邢台" path="xintai">city>
  30.    <city id="206" name="保定" path="baoding">city>
  31.    <city id="207" name="张家口" path="zhangjiakou">city>
  32.    <city id="208" name="承德" path="chengde">city>
  33.   province>
  34.  country>
  35.  <country id="2" name="中国其它地区" path="chinaother">
  36.   <province id="101" name="香港" path="hongkong">
  37.    <city id="301" name="城东" path="chengdong">city>
  38.    <city id="302" name="城西" path="chengxi">city>
  39.   province>
  40.   <province id="102" name="澳门" path="macao">
  41.    <city id="401" name="东门" path="dongmen">city>
  42.    <city id="402" name="西门" path="ximen">city>
  43.   province>
  44.   <province id="103" name="台湾" path="taiwan">
  45.    <city id="501" name="台北" path="taibei">city>
  46.    <city id="502" name="高雄" path="gaoxiong">city>
  47.   province>
  48.  country>
  49. location>

现在我们就用之前创建的xmlDoc来处理这个xml文档。

xml文档中的内容是这样形式的:“国家>省份>城市”。

我们先获取它包含的国家列表:

//获取国家列表

  1. function getCountries(){
  2.  if($(oxml).find("location > country").size()&gt;0){
  3.   var countryHtml;
  4.   $(oxml).find("country").each(function(){
  5.    countryHtml += '<option value="'+$(this).attr("id")+'">'+$(this).attr("name")+'</option>';
  6.   })
  7.   $(countryHtml).appendTo("#country");
  8.  }
  9. }

很简洁的几句话,作用就是获取国家列表然后写成需要的格式的html,再写到”#country”这个div中去。

首先是find()函数,$(oxml).find(”country”)找到所有的”country”;然后用each()函数,意思是对每个”country”都调用each()包含的函数;$(this).attr(”id”),取得当前元素”id”属性的值。

第一次用xml,了解不深,见笑了。

我做这个东西的时候是用在一个批量上传程序上,用户上传之前需要选择国家省份及城市,程序则根据用户选择的地区逐级创建目录,并将文件上传到相应目录下。下面是源码,有需要的随便拿。

阅读(1173) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~