【问题标题】:Is there a way to store, then reset a variable after each line?有没有办法存储,然后在每行之后重置一个变量?
【发布时间】:2020-12-03 12:59:24
【问题描述】:

所以我有一个 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' />

到目前为止,我已经尝试使用 line-reader 库逐行读取,但这并没有按照我需要的方式返回数据

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();

谢谢。

【问题讨论】:

  • 为什么用python标记?请不要标记垃圾邮件。
  • 仅供参考的标准 JavaScript 属性和方法是 camelCase,而不是 TitleCase。尝试将IndexOf 更改为indexOf 等。

标签: javascript node.js xml


【解决方案1】:

去结帐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)

【讨论】:

  • 我实际上尝试将其转换为 json,但这不是我的问题,我的问题实际上是编辑内容...
  • 然后形成一个关于如何etl数据的javascript特定问题。您可以使用 .map 函数并更改属性中的一个值,方法是使用旧 obj 将其分布在新 obj 上。
猜你喜欢
  • 1970-01-01
  • 2022-11-28
  • 2019-12-25
  • 1970-01-01
  • 2020-05-30
  • 2019-08-15
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多