有没有一种方法可以存储,然后在每行之后重置变量?

时间:2020-08-13 16:16:41

标签: javascript node.js xml

所以我有一个xml文件,我试图在节点中编写一个快速脚本进行编辑,以备将来使用。

每行如下所示

<field name='Bank 2 Acc Type' xname='bank_2_acc_type'  locx='264' locy='407.5' width='24.75' esign='' />
<field name='Bank 2 Ch Sav' xname='bank_2_ch_sav'  locx='339.75' locy='408.25' width='25.5' esign='' />
<field name='Bank 2 Acc Num' xname='bank_2_acc_num'  locx='471' locy='408.25' width='100.5' esign='' />

我想要做的是获取xname,在其前面附加一个字符串,例如“ myString”,然后将该属性分配给esign。下面的例子

<field name='Bank 2 Acc Type' xname='bank_2_acc_type'  locx='264' locy='407.5' width='24.75' esign='myStringbank_2_acc_type' />
<field name='Bank 2 Ch Sav' xname='bank_2_ch_sav'  locx='339.75' locy='408.25' width='25.5' esign='myStringbank_2_ch_sav' />
<field name='Bank 2 Acc Num' xname='bank_2_acc_num'  locx='471' locy='408.25' width='100.5' esign='myStringbank_2_acc_num' />

到目前为止,我已经尝试使用行读取器库逐行读取数据,但这并不能以我需要的方式返回数据

const lineReader = require('line-reader');

lineReader.eachLine('./Application.txt', function(line) {
    console.log(line);
    if (line.includes('esign=\'\'')) {

        var line2 = line.toString()
        console.log(line)
        var pFrom = line2.IndexOf("xname='") + "xname='".Length;
        var pTo = line2.LastIndexOf("' ");
        
        var result = line2.Substring(pFrom, pTo - pFrom);

        console.log(result)

        return false; // stop reading
    }
});

这是我重写后要阅读的内容,我现在只需要帮助编辑xml。

var fs = require('fs');

function readWriteSync() {
    var data = fs.readFileSync('Application.xml', 'utf-8');
  
    var newValue = data.replace(/^\./gim, 'myString');
  
    fs.writeFileSync('ApplicationSync.xml', newValue, 'utf-8');
  
    console.log('readFileSync complete');
  }
  
  readWriteAsync();
  readWriteSync();

谢谢。

1 个答案:

答案 0 :(得分:0)

结帐xml2json on npm。 您可以将其转换为json,在进行操作时将其解析回xml。

var parser = require('xml2json');
 
var xml = "<foo attr=\"value\">bar</foo>";
console.log("input -> %s", xml)
 
// xml to json
var json = parser.toJson(xml);
console.log("to json -> %s", json);
// maybe parse json
var myObj = JSON.parse(json)

// json to xml
var xml = parser.toXml(json);
// obj to xml
var xmlObj = parser.toXml(JSON.stringify(myObj))
console.log("back to xml -> %s", xml)