打印

请问js+xml的怎么写,谢谢

<?xml version="1.0" encoding="UTF-8" ?>
<root>
<city cityname="北京" zw="省委书记" name="某某某" number="450"/>
<city cityname="天津" zw="省委书记" name="某某某" number="50"/>
<city cityname="河北" zw="省委书记" name="某某某" number="70"/>
<city cityname="山西" zw="省委书记" name="某某某" number="10"/>
<city cityname="内蒙古" zw="省委书记" name="某某某" number="3"/>
</root>

用js按照number的数值高低来排列然后存到数组中,我只能做到数字按照二叉的方法进行排序,可还要带上前面的这些文字,请高手指点,谢谢
这个确实麻烦阿,用面向对象的语言 c#、java好做很多
等一下试试看
xx.xml为xml文件名。
本来想重写Array.sort,好像很麻烦,算了。
复制内容到剪贴板
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
var xmlObj;
var cityArray = new Array;
function GetXML(){
    if (window.ActiveXObject){
        xmlObj=new window.ActiveXObject("Microsoft.XMLHTTP");
    }else if(window.XMLHttpRequest){
        xmlObj=new XMLHttpRequest();
    }
    xmlObj.open("GET","xx.xml",true);
    //xmlObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlObj.setRequestHeader("Content-Type", "text/xml;charset=utf-8");
    xmlObj.onreadystatechange = GetReady;
    xmlObj.send(null) ;
}
var City = function(cityname,zw,name,number){
    this.cityname=cityname;
    this.zw=zw;
    this.name=name;
    this.number=number;
    this.toString=function(){
        return this.cityname+this.zw+this.name+this.number;
    }
}
function addCity(city){
    if (cityArray.length){
        for (var i=0,j=cityArray.length;i<j;i++){
            //排序的方向修改这里的大小于就ok了
            if (city.number>cityArray[i].number){
                cityArray.splice(i,0,city);
                return;
            }
        }                
    }
    cityArray[cityArray.length]=city;
    
}
function GetReady(){
    if(xmlObj.readyState==4 && xmlObj.status == 200){
        var cityList=xmlObj.responseXML.documentElement.getElementsByTagName("city");
        for (var i=0,j=cityList.length;i<j;i++){
            var cityname=cityList[i].getAttribute("cityname");
            var zw=cityList[i].getAttribute("zw");
            var name=cityList[i].getAttribute("name");
            var number=parseInt(cityList[i].getAttribute("number"));
            addCity(new City(cityname,zw,name,number));
        }
        //程序结束,这里只是打印出来显示
        var str="";
        for (var k=0;k<cityArray.length;k++){
            str+=cityArray[k].toString()+"<br />";                
        }
        document.getElementById("text").innerHTML=str;
    }
}
window.onload=GetXML;
</script>
</head>
<body>
<div id="text" style="border:1px solid #666666"></div>
页面其他内容
</body>
</html>
[ 本帖最后由 yangedie 于 2008-6-20 21:51 编辑 ]
谢谢这位朋友,请问这段代码我在IE7和firefox为什么不能运行呢,谢谢

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
旁门左道

 提示:您可以先修改部分代码再运行
[ 本帖最后由 udbyygy 于 2008-6-21 08:54 编辑 ]
[wma]http://jie.splan.cn/ggldl/梅艳芳.mp3[/wma]

TOP

引用:
原帖由 hoperise 于 2008-6-21 08:30 发表
谢谢这位朋友,请问这段代码我在IE7和firefox为什么不能运行呢,谢谢
原来的代码是用Microsoft.XMLDOM对象,只能运行在ie
现在改用ajax,我在firefox 2测试过可以运行的阿
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

网上搜一下,修改,ie6、firefox2 测试通过
复制内容到剪贴板
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
var xmlObj;
function GetXML(){
    if (window.ActiveXObject){
        xmlObj=new window.ActiveXObject("Microsoft.XMLHTTP");
    }else if(window.XMLHttpRequest){
        xmlObj=new XMLHttpRequest();
    }
    xmlObj.open("GET","xx.xml",true);
    //xmlObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlObj.setRequestHeader("Content-Type", "text/xml;charset=utf-8");
    xmlObj.onreadystatechange = GetReady;
    xmlObj.send(null) ;
}
var City = function(cityname,zw,name,number){
    this.cityname=cityname;
    this.zw=zw;
    this.name=name;
    this.number=number;
    this.toString=function(){
        return this.cityname+this.zw+this.name+this.number;
    }
}
function GetReady(){
    if(xmlObj.readyState==4 && xmlObj.status == 200){
        var cityArray = new Array;
        var cityList=xmlObj.responseXML.documentElement.getElementsByTagName("city");
        for (var i=0,j=cityList.length;i<j;i++){
            var cityname=cityList[i].getAttribute("cityname");
            var zw=cityList[i].getAttribute("zw");
            var name=cityList[i].getAttribute("name");
            var number=parseInt(cityList[i].getAttribute("number"));
            cityArray[i] = new City(cityname,zw,name,number);
        }
        //这里进行排序,升序为修改sObj.number-tObj.number
        cityArray.sort(function(tObj,sObj){return sObj.number-tObj.number});
        
        //程序结束,这里只是打印出来显示
        var str="";
        for (var m=0;m<cityArray.length;m++){
            str+=cityArray[m].toString()+"<br />";                
        }
        document.getElementById("text").innerHTML=str;
    }
}
window.onload=GetXML;
</script>
</head>
<body>
<div id="text" style="border:1px solid #666666"></div>
页面其他内容
</body>
</html>

TOP

上面的例子是通过ajax实现的,直接双击打开看不到效果,必须部署在服务器
下面的例子可以本地运行
注意那个变量xmlObj,虽然和上面例子一样的变量名,但是类型不一样
复制内容到剪贴板
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>数组排序</title>
<script type="text/javascript">
var xmlObj;
function GetXML(){
    if (window.ActiveXObject){
        xmlObj = new ActiveXObject("Microsoft.XMLDOM");
    } else if (document.implementation && document.implementation.createDocument) {
        xmlObj = document.implementation.createDocument("","",null);
    }
    xmlObj.async=false; //不知道怎么兼容ie、ff的状态码怎么写,所以直接设置为false
    xmlObj.load("city.xml")
    GetReady();
}
var City = function(cityname,zw,name,number){
    this.cityname = cityname;
    this.zw = zw;
    this.name = name;
    this.number = number;
    this.toString = show;
}
function show(){return this.cityname+this.zw+this.name+this.number;}
function GetReady(){
    var cityArray = new Array;
    var cityList = xmlObj.documentElement.getElementsByTagName("city");
    var count = cityList.length;
    for (var i=0;i<count;i++){
        var cityname = cityList[i].getAttribute("cityname");
        var zw = cityList[i].getAttribute("zw");
        var name = cityList[i].getAttribute("name");
        var number = parseInt(cityList[i].getAttribute("number"));
        cityArray[i] = new City(cityname,zw,name,number);
    }
    //这里进行排序,升序为修改sObj.number-tObj.number
    cityArray.sort(function(tObj,sObj){return sObj.number-tObj.number});
    
    //程序结束,这里只是打印出来显示
    var str="";
    for (var j=0;j<count;j++){
        str+=cityArray[j].toString()+"<br />";                
    }
    document.getElementById("text").innerHTML=str;    
}
window.onload=GetXML;
</script>
</head>
<body>
<div id="text" style="border:1px solid #666666"></div>
页面其他内容
</body>
</html>

TOP

感谢,非常感谢,ajax没弄过,看来需要学习了。

TOP

1.非IE浏览器的XMLDOM对象:document.implementation.createDocument
2.XML排序,使用XSL-XPATH:<xsl:sort select="@number"/>
3.你的XML构造得不是很好,属性最好适当,可以把一些属性作为字段,更明确数据类型和数据作用
Rammstein

TOP

楼上的朋友说的即是,谢谢

我还想问下各位高手,如果我把这个要做成分页的效果请问怎么做啊,还是这个xml,每页的条数可以自己设定,谢谢。

TOP

分页先求sum 每页几条 生成菜单 思路就这样

看一下 这个示例  http://bd.448.cn/demo/ajax/

TOP

楼上的是ajax的,请问js的可以实现吗?

TOP