2016-08-16 11 views
0

私はGulpJSを使用して配列の値で属性値を置き換える必要があるXMLファイルを持っています。配列users1の既存の属性値は、users2配列の項目に置き換える必要があります。gulpjsを使用して配列値を別の配列の値に置き換える方法

の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> 

、私はカンマ区切り値によって置き換えられているXML内のすべての値(ユーザー1列)を取得しています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/')); 
}); 
+0

thanks @sven! (i = 0; i

関連する問題