从一个XML树提取相关信息

问题:想要从一个XML文档访问单独的数据块
解决方案:使用用来查询Web页面元素相同的DOM方法,来查询XML文档:var resources = document.getElementByTagName(“resource”);
注意:头部编写为返回带有一个text/xml 的MIME类型的内容,并且Access-Control-Allow-Origin头部值设置为接受来自所有域(*)的查询。由于node应用程序在不同的端口运行,而不只是在查询它的web页面运行,所有我们必须设置,允许所有域,以便跨域访问。
如下是一个node.js服务器应用程序

var http = require('http');
var url = require('url');
var XMLWriter = require('xml-writer');
//启动服务器,监听请求
var server = http.createServer().listen(8080);
server.on('request',function(req,res){
    var xw = new XMLWriter;
    //开始doc和root元素
    xw.startDocument().startElement("resources");
    //资源
    xw.startElement("resource");
    xw.writeElement("title","Ecma-262 Edition 6");
    xw.writeElement("url","http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts");
    xw.endElement();
    //资源
    xw.startElement("resource");
    xw.writeElement("title","ECMA-262 Edition 5.1");
    xw.writeElement("url","http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf");
    xw.endElement();
    //资源
    xw.startElement("resource");
    xw.writeElement("title","ECMA-402");
    xw.writeElement("url","http://ecma-international.org/ecma-402/1.0/ECMA-402.pdf");
    xw.endElement();
    //结束资源
    xw.endElement();
    res.writeHeader(200,{
        "Content-Type":"application/xml",
        "Access-Control-Allow-Origin":"*",//允许跨域
        });
    res.end(xw.toString(),"utf8");
});

我们启动 node.js服务器应用程序,注意要安装相关模块,比如程序中用到的 xml-writer .使用npm xml-writer
这里写图片描述

运行结果
这里写图片描述
下面是处理XML返回的资源应用程序

<!DOCTYPE html>
<html>
<head>
    <title>Stories</title>
    <meta charset="utf-8">
</head>
<body>
    <div id="result"></div>
    <script type="text/javascript">
    var xmlRequest ;
    //ajax对象
    if(window.XMLHttpRequest){
        xmlRequest = new XMLHttpRequest();
    }
    //构建请求
    var url = "http://localhost:8080/";
    xmlRequest.open('GET',url,true);
    xmlRequest.onreadystatechange=getData;
    xmlRequest.send();
    function getData(){
        if(xmlRequest.readyState ==4 && xmlRequest.status==200){
            console.log("ready is ready");
            try{
                var result = document.getElementById("result");
                console.log(result);
                var str = "<p>";
                //可以在XML文档上使用DOM方法
                var resources = xmlRequest.responseXML.getElementsByTagName("resource");
                console.log(resources);
                //处理资源
                for(var i = 0; i<resources.length; i++){
                    var resource = resources[i];
                    //获取title和URL,生成HTML
                    var title = resource.childNodes[0].firstChild.nodeValue;
                    var url= resource.childNodes[1].firstChild.nodeValue;
                    str+="<a href='"+url+"'>"+title+"</a><br/>";
                }
                //完成HTML并插入
                str+="</p>";
                result.innerHTML = str;
            }catch(e){
                console.log(e.message);
            }
        }
    }
    </script>
</body>
</html>

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值