在Node JS中使用fs-extra更新xml文件

我想读取特定的XML标签,并更新它。

这里是xml文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <widget id="com.ionicframework.myapp450442" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <name>myApp</name> <description> An Ionic Framework and Cordova project. </description> <author email="hi@ionicframework" href="http://ionicframework.com/"> Ionic Framework Team </author> <content src="index.html"/> <access origin="*"/> <preference name="webviewbounce" value="false"/> <preference name="UIWebViewBounce" value="false"/> <preference name="DisallowOverscroll" value="true"/> <preference name="android-minSdkVersion" value="16"/> <preference name="BackupWebStorage" value="none"/> <feature name="StatusBar"> <param name="ios-package" value="CDVStatusBar" onload="true"/> </feature> </widget> 

我在堆栈上的stream程中跟着这个类似的问题,但它并没有为我工作。

这里是我使用的代码

  fs.readFile(configFile, 'utf-8',function(err, data) { if (err) { return console.log(err); } var name="<name>"+appName+"</name>"; var cursor = "//cursor"; var result = data.replace(/\/\/cursor/,name); fs.writeFile(configFile, result, 'utf-8', function(err) { if (err) return console.log(err); }); fs.writeFile(appIconFile, icon, 'base64', function(err) { if (err) return console.log(err); }); }); 

有人可以告诉我这里可能是什么问题吗?

有没有更好的NPM模块..?

您可以将XMLparsing为JSON,replace需要,然后保存到XML。

例如,看看xml2js模块:

 var fs = require('fs'), xml2js = require('xml2js'), util = require('util'); var parser = new xml2js.Parser(), xmlBuilder = new xml2js.Builder(); fs.readFile(configFile, function(err, data) { parser.parseString(data, function (err, result) { console.log(util.inspect(result, false, null)) result.widget.name = ['new name']; var xml = xmlBuilder.buildObject(result); fs.writeFile(configFile, xml); }); }); 

stdob答案的小改动

 var fs = require('fs'), xml2js = require('xml2js'); var parser = new xml2js.Parser(), xmlBuilder = new xml2js.Builder(); fs.readFile(configFile, function(err, data) { parser.parseString(data, function (err, result) { console.log(result) result.widget.name = ['new name']; var xml = xmlBuilder.buildObject(result); fs.writeFile(configFile, xml); }); }); 

他用了不必要的模块。