使用 Node.js 将 XML 文件传递给 xml2js
Passing XML File To xml2js With Node.js
背景
我从一个大型 XML
响应中提取了一些样本数据,我将在我的应用程序中使用它。我决定将 xml 保存到我的应用程序中的 response.xml
文件中,这样我就可以解析数据而无需向 api 发出一堆不必要的请求。
我将使用 xml2js
将 xml 响应转换为 JS
Object
。
问题
我已经能够打开文件并 console.log()
它。
我已经能够 运行 xml2js
通过向它传递一个小的 xml 字符串,我也 console.log()
它。
但我只能在 xml2js 创建对象后 console.log()
文件。无论我尝试什么,在使用 return 或尝试在对象的初始创建之外传递数据时,我都会继续得到空值。
例子
这会将 xml tree
打印到控制台,
var fs = require('fs');
var openFile = fs.readFile('./response.xml', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
console.log(data);
});
function requestCreditReport() {
return openFile;
}
requestCreditReport();
这会打印一个小的 xml string
来控制台静态添加
xml2js
,
var parseString = require('xml2js').parseString;
var xml = "<root>Hello xml2js!</root>";
parseString(xml, function (err, result) {
console.dir(result);
});
问题
在以下方法之外创建对象后,如何使用它。最初创建时,我可以将它输出到控制台,但似乎无法在 console.log()
之外访问它。在下面的示例中,我正在尝试 return result
。当我尝试将函数 returned 的对象传递给这样的变量时,这会留下空值,
var response = requestReport();
最近尝试,
var fs = require('fs');
var parseString = require('xml2js').parseString;
function requestReport() {
fs.readFile('./response.xml', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
return parseString(data, function (err, result) {
return result;
});
});
}
var response = requestReport();
console.log(response);
这个returns null
。但是如果我 console.log(result) 而不是或使用 return 然后在函数之外尝试它 returns this,
{ RESPONSE_DATA:
{ '$': { MYAPI: '0.0.0' },
DETAILS: [ [Object] ],
DETAILS_ACCOUNT: [ [Object] ],
RESPONSE: [ [Object] ] } }
requestReport 是异步的。它没有 return 任何内容,因此响应未定义。
你必须使用回调。
var fs = require('fs');
var parseString = require('xml2js').parseString;
function requestReport(callback) {
fs.readFile('./response.xml', 'utf8', function(err, data) {
if (err) return callback(err);
parseString(data, callback);
});
}
requestReport(function(err, result) {
if (err) return console.error(err);
console.log(result);
});
背景
我从一个大型 XML
响应中提取了一些样本数据,我将在我的应用程序中使用它。我决定将 xml 保存到我的应用程序中的 response.xml
文件中,这样我就可以解析数据而无需向 api 发出一堆不必要的请求。
我将使用 xml2js
将 xml 响应转换为 JS
Object
。
问题
我已经能够打开文件并 console.log()
它。
我已经能够 运行 xml2js
通过向它传递一个小的 xml 字符串,我也 console.log()
它。
但我只能在 xml2js 创建对象后 console.log()
文件。无论我尝试什么,在使用 return 或尝试在对象的初始创建之外传递数据时,我都会继续得到空值。
例子
这会将 xml tree
打印到控制台,
var fs = require('fs');
var openFile = fs.readFile('./response.xml', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
console.log(data);
});
function requestCreditReport() {
return openFile;
}
requestCreditReport();
这会打印一个小的 xml string
来控制台静态添加
xml2js
,
var parseString = require('xml2js').parseString;
var xml = "<root>Hello xml2js!</root>";
parseString(xml, function (err, result) {
console.dir(result);
});
问题
在以下方法之外创建对象后,如何使用它。最初创建时,我可以将它输出到控制台,但似乎无法在 console.log()
之外访问它。在下面的示例中,我正在尝试 return result
。当我尝试将函数 returned 的对象传递给这样的变量时,这会留下空值,
var response = requestReport();
最近尝试,
var fs = require('fs');
var parseString = require('xml2js').parseString;
function requestReport() {
fs.readFile('./response.xml', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
return parseString(data, function (err, result) {
return result;
});
});
}
var response = requestReport();
console.log(response);
这个returns null
。但是如果我 console.log(result) 而不是或使用 return 然后在函数之外尝试它 returns this,
{ RESPONSE_DATA:
{ '$': { MYAPI: '0.0.0' },
DETAILS: [ [Object] ],
DETAILS_ACCOUNT: [ [Object] ],
RESPONSE: [ [Object] ] } }
requestReport 是异步的。它没有 return 任何内容,因此响应未定义。
你必须使用回调。
var fs = require('fs');
var parseString = require('xml2js').parseString;
function requestReport(callback) {
fs.readFile('./response.xml', 'utf8', function(err, data) {
if (err) return callback(err);
parseString(data, callback);
});
}
requestReport(function(err, result) {
if (err) return console.error(err);
console.log(result);
});