2017-07-10 4 views
0

のGradleのzip:のGradleは、XML操作のための場所でフィルタを追加する方法をジップ

task mytask(type: Zip) { 

    from ("foo/bar") { 

     include "config.xml" 
     filter { 
      def root = new XmlParser().parser(configXml_inputStream) 
      root.hello.world.append(aNode) 
      groovy.xml.XmlUtil.serialize(root, configXml_outputStream) 
     } 
    } 

} 

フィルタ閉鎖パラメータはライン、ないファイルである、例えば、新しいノードを追加することによって、XMLファイルをフィルタリングする方法。 XMLファイルを操作するために、カスタムフィルタを書く方法

filter(myFilterType) 

カスタムフィルタを作成の例/ドキュメントを見つけることができませんでした。

答えて

0

フィルタはxmlノードではなく、行で動作します。次の例は、行を使用した置換を示していますが、はxmlのstrangeというアプローチであり、一般的な場合は機能しません。

<root> 
    <hello> 
     <world> 
     </world> 
    </hello> 
</root> 

増補するだけ<world>要素があることをを想定し、このbuild.gradle考えてみます:

task mytask(type: Zip) { 
    archiveName "config.zip" 

    from ("foo/bar") { 
     include "config.xml" 

     filter { line -> 
      def result = line 

      if (line.trim() == '<world>') { 
       def buffer = new StringBuilder() 
       buffer.append(line + "\n") 
       buffer.append('<aNode type="example">' + "\n") 
       buffer.append('</aNode>') 
       result = buffer.toString() 
      } 

      result 
     } 
    } 
} 

その後、config.zipで​​3210次のとおりです。

この foo/bar/config.xml考える

<root> 
    <hello> 
     <world> 
<aNode type="example"> 
</aNode> 
     </world> 
    </hello> 
</root> 
関連する問題