これを尋ねるのはばかげていると感じますが、これまでのところ午後全体を無駄にしていて、まだ解決策に近づいていません。一部のJenkinsインスタンスのロールアウトを自動化しており、既存のジョブをコピーしたいと思います。
Perlスクリプトでconfig.xmlファイルを解析していて、特定の文字列要素を置き換える必要があります。
XML :: Simpleでほぼそこに到達しましたが、出力に必要なデータ構造が失われていることがわかりました。さらに読むと、これがXML::Simpleの仕組みであることがわかりました。だから私はXML::LibXMLを試し始めました
サンプル入力は次のようになります。
<project>
<properties>
<hudson.model.ParametersDefinitionProperty>
<parameterDefinitions>
<hudson.model.ChoiceParameterDefinition>
<name>environment</name>
<choices class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>1</string>
<string>2</string>
<string>3</string>
<string>4</string>
<string>5</string>
</a>
</choices>
</hudson.model.ChoiceParameterDefinition>
</parameterDefinitions>
</hudson.model.ParametersDefinitionProperty>
<de.pellepelster.jenkins.walldisplay.WallDisplayJobProperty/>
</properties>
</project>
たとえば、私が達成しようとしているのは、すべての<string>n</string>
要素を削除してから、いくつかの異なる要素を追加することです。
また、コードは比較的単純である必要があります。
my $p = XML::LibXML->new;
my $d = $p->parse_string($input);
my $params = $d->findnodes('/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition/choices');
これはノードリストを返します。しかし、私はこのリストにある要素を操作することができないようです。私がするなら
print $params->to_literal;
次に、操作したいデータがあることがわかります。しかし、私は次のステップを踏み出すのに苦労しています。誰かが私を正しい方向に向けるのを手伝ってもらえますか?