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

Update xml file using fs-extra in Node JS

我想阅读特定的 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>

我在 stack over flow 上关注了这个类似的问题,但它对我不起作用。

这是我使用的代码

   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模块..?

可以将XML解析为JSON,替换需要,保存回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);

    });
});

他使用了不必要的模块。