此代码仅在我键入last xml的元素ID时才返回内容。 我想在输入任何元素的ID时加载内容和页面。 怎么做?
var libxmljs = require("libxmljs");
var xml = ('/Path/Apples.xml');
fs.readFile(__dirname + '/Apples.xml', function (err, data) {
var xmlStr = data.toString();
var xmlDoc2 = libxmljs.parseXmlString(xmlStr);
var Apple = xmlDoc2.get('Apples').childNodes();
for (var i = 0; i < Apple.length; i++) {
var nameattr = xmlDoc2.get('Apples').get('Apple').attr('id').value();
var AppleId = Apple[i].attr('id');
if (AppleId !== null) {
var AppleIdVal = AppleId.value();
console.log('somename ' + AppleIdVal);
app.get('/obj/:id', function (req, res) {
if (req.params.id == AppleIdVal) {
console.log('nameAttr: ' + AppleIdVal);
res.json('This is id: ' + AppleIdVal);
}
});
}
}
答案 0 :(得分:0)
只有函数闭包可以捕获当前的变量值,而不是if () {}
块。此外,您每次AppleId
不是null
时都会添加一堆重复的路由。考虑重写您的逻辑,例如:
var libxmljs = require('libxmljs');
var xmlDoc2, Apple;
fs.readFile(__dirname + '/Apples.xml', function(err, data) {
xmlDoc2 = libxmljs.parseXmlString(data.toString());
Apple = xmlDoc2.get('Apples').childNodes();
// move your `app.listen()` here instead so that the file will have been read
// before processing any requests
});
app.get('/obj/:id', function (req, res) {
for (var i = 0; i < Apple.length; i++) {
var nameattr = xmlDoc2.get('Apples').get('Apple').attr('id').value(),
AppleId = Apple[i].attr('id');
if (AppleId !== null) {
var AppleIdVal = AppleId.value();
if (req.params.id == AppleIdVal)
return res.json('This is id: ' + AppleIdVal);
}
}
res.json('id not found');
});
此外,您可以考虑为执行单个xpath查找的代码交换for循环以查找id
。