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

Thu*_*thz 1 javascript xml fs 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>
Run Code Online (Sandbox Code Playgroud)

我在堆栈溢出上遵循了这个类似的问题,但它对我不起作用。

这是我使用的代码

   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);
      });
  });
Run Code Online (Sandbox Code Playgroud)

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

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

std*_*b-- 5

您可以将 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);

    });
});
Run Code Online (Sandbox Code Playgroud)