我正在使用https.req来获取一些xml文件。我在回调后获取数据我使用
将该缓冲区转换为字符串var data = Chunk.toString("utf-8");
然后我用objtree或xml2js解析这个xml文件。 有一段时间它是好的因为文件真的很小,没有什么可以出错。但现在我正在解析一个巨大的xml文件,我的解析给了我错误。
几个小时我觉得解析器很糟糕。尝试了很多。然后我决定使用验证器检查是否与xml一起使用。所以我在浏览器中使用了链接xml文档,从浏览器窗口复制并检查了我的xml文档。一切都很好。但后来我用了
console.log(data);
并且它给了我同样的文件,但验证器给我带来了大量的错误。所以现在我确定我正在做错误,缓冲它自己。并将其转换为字符串。
错误是未关闭的标签,未完成的行是空的属性和值。
答案 0 :(得分:0)
这里有几个问题:
第一个是(假设Chunk
是我认为的那样)你不应该假设你的所有数据都会在一个'data'
事件中到达,所以你需要缓冲收到的块和在响应流上看到'end'
事件后,使用缓冲的数据。
其次,如果您要转换为UTF-8,则可能需要调用response.setEncoding('utf8')
,这将确保跨块分割的任何多字节字符都不会转换为无效的字符字节序列。一旦你这样做,这意味着你可以buffer += chunk
。