在 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);
});
});
他使用了不必要的模块。
我想阅读特定的 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);
});
});
他使用了不必要的模块。