gpt4 book ai didi

javascript - 使用 NodeJS 读取 XML 托管文件

转载 作者:搜寻专家 更新时间:2023-11-01 00:19:06 26 4
gpt4 key购买 nike

好的,所以我尝试使用 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);
});
});

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

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

最佳答案

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

关于javascript - 使用 NodeJS 读取 XML 托管文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9151109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com