1

私はgroovyを初めて使用しています(数週間の経験)。現在、groovy を使用していくつかのビジュアル スタジオ ファイルを処理しようとして.vcprojいます。正規表現パターンによって検出されるいくつかのパスを置き換えます。これは私にとってはうまくいきます。

ファイルに変更を書き込むために、私は

XmlUtil.serialize(slurper, writer)

メソッド、ここで

def writer = new FileWriter(outputFile)

def slurper = new XmlSlurper(keepIgnorableWhitespace:true).parse(it)

これも、1 つのことを除いて正常に動作します。元のvcprojファイルでは、各属性は次のように別々の行にあります。

<Configurations>
        <Configuration
            Name="Debug|Win32"
            OutputDirectory="$(ConfigurationName)"
            IntermediateDirectory="$(ConfigurationName)"
            ConfigurationType="1"
            InheritedPropertySheets="..\..\..\..\Test_Debug.vsprops"
            CharacterSet="2"
            >

serialize()ただし、クラスのメソッドを呼び出した後、XMLUtil出力全体が 1 行に格納されます。

<Configurations>
        <Configuration Name="Debug|Win32" InheritedPropertySheets="..\..\..\..\Test_Debug.vsprops" OutputDirectory="$(ConfigurationName)" IntermediateDirectory="$(ConfigurationName)" ConfigurationType="1" CharacterSet="2">

XMS パーサーの場合、これは問題にならないはずですが、後処理で一部の perl スクリプトがこのvcprojファイルを使用し、属性行内に CR/LF がないと文句を言います。

XMLslurper各属性の間に CR/LF を保持するように、または serialize-class を構成する簡単な可能性はありますか?

4

1 に答える 1

0

groovy の xml 出力をそのレベルにフォーマットする簡単な方法があるとは思えません。出力は有効な XML なので、ある種のperl XML パーサーを使用できませんか?

それ以外に、属性を正​​規表現と一致させ、それらに改行を追加することができます。非常に醜いハック:

import groovy.xml.XmlUtil

def original = '''<Configurations>
        <Configuration
            Name="Debug|Win32"
            OutputDirectory="$(ConfigurationName)"
            IntermediateDirectory="$(ConfigurationName)"
            ConfigurationType="1"
            InheritedPropertySheets="..\\..\\..\\..\\Test_Debug.vsprops"
            CharacterSet="2"
            >
        </Configuration>
    </Configurations>
            '''

parsed = new XmlParser().parseText original

println XmlUtil.serialize(parsed).replaceAll(/[a-zA-Z]*="[^\"]*"/) {
    "\n" + it 
}

印刷されます:

<?xml 
version="1.0" 
encoding="UTF-8"?><Configurations>
  <Configuration 
Name="Debug|Win32" 
OutputDirectory="$(ConfigurationName)" 
IntermediateDirectory="$(ConfigurationName)" 
ConfigurationType="1" 
InheritedPropertySheets="..\..\..\..\Test_Debug.vsprops" 
CharacterSet="2"/>
</Configurations>
于 2015-11-30T14:27:57.177 に答える