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