我们怎样才能在Meteor的后端获得解析的XML对象?
> HTTP,因此您可以“获取”外部XML
> xml2js,因此您可以在XML出现后解析它
像这样安装并重启服务器:
meteor add http peerlibrary:xml2js && meteor
其次,构建服务器端功能.它不一定是Meteor方法,但是对于这个例子,我会将它放在一个中,这样我们就可以轻松地解决它.使用HTTP.call() or HTTP.get()发出请求.然后是URL;我将使用示例XML文件.然后是后URL参数;就我而言,没有.然后是回调函数.
Meteor.methods({ 'xmlDemo':function(){ HTTP.call('GET','http://www.xmlfiles.com/examples/plant_catalog.xml',{},function(callError,callResponse){ console.log('xml',callResponse); } ); } });
如果您是Meteor的新手,请首先在回调函数中特别注意“error”参数.
第三,尝试该方法.这就像一场电话游戏.
>客户端调用流星服务器. Meteor.call( ‘xmlDemo’);
>流星服务器调用外部URL.
如果一切顺利,该方法将读取文件内容,并在服务器的控制台上显示输出. (即看看你运行“流星”的终端)
{ statusCode: 200,content: '<?xml version="1.0" encoding="ISO8859-1" ?>\r\n<CATALOG>\r\n (et cetera...) (et cetera...) (et cetera...)',headers: { 'content-type': 'text/xml','last-modified': 'Tue,24 Apr 2012 21:06:45 GMT','accept-ranges': 'bytes',etag: '"80a095275e22cd1:0"',server: 'Microsoft-IIS/7.5','x-powered-by': 'ASP.NET',date: 'Mon,30 Nov 2015 19:17:26 GMT','content-length': '8167' },data: null }
这里看到的最重要的事情是来自HTTP.call的响应是一个对象. “content”字段保存实际数据. (这是我个人被绊倒的地方.)
第四,尝试将XML字符串传递给xml2js.
Meteor.methods({ 'xmlDemo':function(){ HTTP.call('GET',callResponse){ //console.log('xml',callResponse); xml2js.parseString(callResponse.content,function (jsError,jsResult) { console.error('errors',jsError); console.log('xml to js',jsResult); }); } ); } });
再一次,运气好的话,你会看到植物作为终端打印出来的物体.您现在要做的就是获取对象数组,遍历它,并将内容存储到集合中. Underscore让它变得简单(它内置于Meteor)
_.each(jsResult.CATALOG.PLANT,function(plant){ Plants.insert(plant); }
最后,您将添加几个故障保险箱来报告错误.另外xml2js开箱即用并不一定能很好地收集集合的工作方式.你需要set a few options.
> explicitArray:false(默认情况下,像< this>示例< / this>这样的标签会变成{this:[“example”]}.在Mongo中,这被认为是嵌入式文档,你会遇到麻烦.)
> emptyTag:undefined(默认情况下,像< this />这样的空标签会变成{this:”}.就个人而言,我觉得让空的东西不存在更容易,检查它们是否存在而不是检查它们是否存在并且实际上有内容)
在/lib/file.js上…
Plants = new Mongo.Collection('plants');
在/server/file.js上…
Meteor.methods({ 'xmlDemo':function(){ HTTP.get('http://www.xmlfiles.com/examples/plant_catalog.xml',function(xmlError,xmlResponse){ if(xmlError){ console.error('xmlError',xmlError); }else{ xml2js.parseString(xmlResponse.content,{explicitArray:false,emptyTag:undefined},jsResult) { if(jsError){ console.error('xml2js error',jsError); }else{ _.each(jsResult.CATALOG.PLANT,function(plant){ Plants.insert(plant); } } }); } ); } });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。