Как заменить значения массива значениями в другом массиве, используя gulpjs

У меня есть файл XML, где мне нужно заменить значения атрибута на значения из массива, используя GulpJS. Существующие значения атрибута в массиве users1 необходимо заменить элементами в массиве users2.

Код JavaScript:

var gulp = require('gulp');
var replace = require('gulp-replace');
var rs = require('replacestream');
var through = require('through2');

gulp.task('default', function() {
    //array is dynamic
    var users1 = ["existing_value1", "existing_value2", "existing_value3"];
    var users2 = ["new_value1", "new_value2", "new_value3"];
    var num = users.length();

        gulp.src(['idmap/*.xml'])
            .pipe(replaceArray(users1, users2))
            .pipe(gulp.dest('build/'));
});


function replaceArray(searchArray, replacement) {
    return through.obj(function(file, encoding, callback) {
        if (file.isBuffer()) {
            var result = searchArray.reduce(function(contents, searchArray) {
                return contents.split(searchArray).join(replacement);
            }, String(file.contents));
            file.contents = new Buffer(result);
            return callback(null, file);
        }
        callback(null, file);
    });
}

Пример XML:

<?xml version="1.0"?><IDMAP>
<RECORD>
    <TOKEN data="414" />
    <NAME data="existing_value1" />
</RECORD>
<RECORD>
    <TOKEN data="420" />
    <NAME data="existing_value2" />
</RECORD>
<RECORD>
    <TOKEN data="361" />
    <NAME data="existing_value3" />
</RECORD></IDMAP>

С помощью приведенного выше кода я получаю все значения (массив users1) в XML, которые заменяются значениями в массиве users2 через запятую. Как заменить все элементы на соответствующие в массиве?

Заранее спасибо!

1 ответ

Решение

Ваш replaceArray() функция не нужна. Ты уже require() gulp-replace плагин, поэтому я предлагаю вам использовать его. Решение становится тривиальным при использовании gulp-replace:

var gulp = require('gulp');
var replace = require('gulp-replace');

gulp.task('default', function() {
  var users1 = ["existing_value1", "existing_value2", "existing_value3"];
  var users2 = ["new_value1", "new_value2", "new_value3"];

  var stream = gulp.src(['idmap/*.xml']);
  users1.forEach(function(u, i) {
    stream = stream.pipe(replace(users1[i], users2[i]));
  });
  return stream.pipe(gulp.dest('build/'));
});
Другие вопросы по тегам