使用NodeJS读取XML托管文件

Read XML hosted file with NodeJS

本文关键字:文件 XML NodeJS 读取 使用      更新时间:2023-09-26

好的,所以我尝试使用NodeJS必须提供的多个XML库,但我似乎不知道如何让NodeJS从网站上读取XML文件。

我可以使用http.request、http.get等来提取文件,但让NodeJS能够对XML文件中的数据执行任何操作则另当别论。

我确信,当我用XML流将XML转换为JS时,我一定错过了一些东西;它不能在网站上使用它;我的代码在托管文件时运行,但我使用的是api,它们只使用XML。

当前代码:

    var http = require('http');
var XmlStream = require('xml-stream');
var options = { host: 'cloud.tfl.gov.uk',
        path: '/TrackerNet/LineStatus'};
var twitter = { host: 'api.twitter.com',
        path: '/1/statuses/user_timeline.rss?screen_name=nwhite89'}

var request = http.get(options).on('response', function(response) {
  response.setEncoding('utf8');
  var xml = new XmlStream(response);
  xml.on('updateElement: item', function(item) {
    item.title = item.title.match(/^[^:]+/)[0] + ' on ' +
      item.pubDate.replace(/ +[0-9]{4}/, '');
  });

  xml.on('text: item > pubDate', function(element) {
    element.$text = element.$text;
  }); 

  xml.on('data', function(data) {
    process.stdout.write(data);
  });
});

我不明白的是,使用Twitter在xml.on("data")部分可以很好地输出,但使用选项(cloud.tfl.gov.uk)时,即使我在数据函数中放入console.log("hi"),也不会输出任何结果。

我知道url在创建了它连接的变量xml输出后输出console.log(xml)或console.log(response)是正确的。如果有任何帮助,我将不胜感激。我已经在这件事上坚持了整整两天了。

<?xml标记之前有一个字节顺序标记,该xml流在一位上绊倒,使其无法读取标记中的编码。这意味着你需要自己提供。

取而代之的是:

response.setEncoding('utf8');
var xml = new XmlStream(response);

只需这样做:

response.setEncoding('utf8');
var xml = new XmlStream(response, 'utf8');

实际上,在流上设置编码是可选的。

var xml = new XmlStream(response, 'utf8');

效果很好。

更多信息请点击此处:http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8

如果您查看从response而不是xml发出的缓冲区,则缓冲区以开始

<Buffer ef bb bf 3c 3f 78 6d ...>

前3个字节是utf8的字节顺序标记,之后就是标记的开头。xml-stream期望<?xml标记与文件开头之间只有空白,但字节顺序标记不算作空白。