【问题标题】:Read XML hosted file with NodeJS使用 NodeJS 读取 XML 托管文件
【发布时间】:2012-07-10 08:33:39
【问题描述】:

好的,所以我尝试使用 NodeJS 必须提供的多个 XML 库,但我似乎无法弄清楚如何让 NodeJS 从网站读取 XML 文件。

我可以使用 http.request、http.get 和所有这些来提取文件,但是让 NodeJS 能够对 XML 文件中的数据实际执行任何操作是另一回事。

我确定我一定会遗漏一些东西,就像我使用 xml-stream 将 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);
  });
});

我不明白的是在 xml.on("data") 部分使用 Twitter 可以正常输出,但是使用选项 (cloud.tfl.gov.uk) 即使我输入 console.log("hi" 也没有输出) 在 data 函数中它不会被执行。

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

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    <?xml 标记之前有一个字节顺序标记,xml-stream 会跳闸并阻止它读取标记中的编码。这意味着您需要自己提供。

    而不是这个:

    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 期望 &lt;?xml 标记在它和文件开头之间只有空格,但字节顺序标记不算作空格。

    【讨论】:

    • 我真的非常感谢你的帮助,不得不更改为 var xml = new XmlStream(response, 'utf8');我不敢相信它是这么小的东西;但是我知道它必须是!
    猜你喜欢
    • 2011-12-08
    • 2019-06-11
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多