从一个XML树提取相关信息

来源:互联网 发布:kiki软件 编辑:程序博客网 时间:2024/06/15 03:03

问题:想要从一个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>

这里写图片描述

原创粉丝点击