如何在没有字符串比较的情况下快速将节点附加到带有node.js的XML文件中

时间:2015-11-21 12:51:02

标签: xml node.js

此处提出了一个解决方案:How to append to certain line of file?

我将解决方案复制到此处以供参考

var fs = require('fs');

var xmlFile;
fs.readFile('someFile.xml', function (err, data) {
  if (err) throw err;
  xmlFile = data;

  var newXmlFile = xmlFile.replace('</xml>', '') + 'Content' + '</xml>';

  fs.writeFile('someFile.xml', newXmlFile, function (err) {
    if (err) throw err;
    console.log('Done!');
  }); 
});

但是,上述解决方案需要'</xml>'字符串的字符串匹配。如果我们知道文件的最后一行总是'</xml>'有没有办法通过消除字符串比较的需要来加速代码?还有另一种更有效的方法来完成这项任务吗?

1 个答案:

答案 0 :(得分:2)

您既不需要阅读文件的全部内容,也不需要使用replace来执行此操作。您可以覆盖固定位置的内容 - 此处为fileSize-7,长度为'</xml>' + 1:

var fs = require('fs');

//content to be inserted
var content = '<text>this is new content appended to the end of the XML</text>';

var fileName = 'someFile.xml',
    buffer = new Buffer(content+'\n'+'</xml>'), 
    fileSize = fs.statSync(fileName)['size'];

fs.open(fileName, 'r+', function(err, fd) {
    fs.write(fd, buffer, 0, buffer.length, fileSize-7, function(err) {
        if (err) throw err
        console.log('done') 
    })  
});

这将有效加快性能。