我有以下代码从URL读取XML主体并将其另存为.json文件。
var parseString = require('xml2js').parseString;
var http = require('http');
var fs = require('fs');
var url = "http://vhost11.lnu.se:20090/assig2/index.php?table=User&id=1"
function xmlToJson(url, callback) {
var req = http.get(url, function(res) {
var xml = '';
res.on('data', function(chunk) {
xml += chunk;
});
res.on('error', function(e) {
callback(e, null);
});
res.on('timeout', function(e) {
callback(e, null);
});
res.on('end', function() {
parseString(xml, function(err, result) {
callback(null, result);
});
});
});
}
xmlToJson(url, function(err, data) {
if (err) {
// Handle this however you like
return console.err(err);
}
fs.writeFile("./users.json", JSON.stringify(data, null, 4), (err) => {
if (err) {
console.error(err);
return;
};
});
})
这很有效。现在我必须通过递增' id ="来浏览几个网址。网址的一部分,' id = 1"," id = 2"," id = 3"等,并将所有数据保存在同一个json文件中。
http://vhost11.lnu.se:20090/assig2/index.php?table=User&id=1
我该怎么做?
答案 0 :(得分:0)
var parseString = require('xml2js').parseString;
var http = require('http');
var fs = require('fs');
var url = "http://vhost11.lnu.se:20090/assig2/index.php?table=User&id="
function xmlToJson(url,id, callback) {
var req = http.get(url+id, function(res) {
var xml = '';
res.on('data', function(chunk) {
xml += chunk;
});
res.on('error', function(e) {
callback(e, null);
});
res.on('timeout', function(e) {
callback(e, null);
});
res.on('end', function() {
parseString(xml, function(err, result) {
callback(null, result);
});
});
});
}
for(var i = 1 i<=10;i++){
xmlToJson(url,i, function(err, data) {
if (err) {
// Handle this however you like
return console.err(err);
}
var jsoncontent = fs.readFileSync("./users.json").toString();
fs.writeFile("./users.json", jsoncontent+"\n"+JSON.stringify(data, null, 4), (err) => {
if (err) {
console.error(err);
return;
};
});
}
})
&#13;
你可以看到在url的末尾我删除了id号,在xmltojson函数中我添加了一个id参数,所以现在该函数可以在循环中使用,所以可以获取很多id或者你可以只是插入一个特定的id来获取xml。还要注意我在写入之前读取了json文件,以便我可以获取已经存在的内容并添加到其中