コマンドラインを使用してXMLファイルの複数行を変更する

コマンドラインを使用してXMLファイルの複数行を変更する

以下のテキストを見てください。複数行のテキストをどのように変更できますか?

<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

出力は次のとおりです。

<Model500>
AAA
BBB 
CCC
</Model500>
<Model500>
111
333
555
</Model500>

sedBashで動作するコマンドラインユーティリティを使用してこれを実行したいと思います。これを行うにはループを使用する必要がありますか?

答え1

適切に使用するツールはケースに入っており、良いです:

xmlstarlet edit -L -u "//Model500[1]"  -v "AAA                                                                
BBB
CCC" file.xml

xmlstarlet edit -L -u "//Model500[2]" -v "111                                                               
333
555" file.xml


cat file.xml

表現//Model500[2]Xパス表現

注1

次のタグでxmlをラップする必要があります。

<root>
...
</root>

XMLが有効です。問題を解決するには、XMLファイルを切り取ってください。

参考²

また、使用することができますちょっと待って...そして適切なXMLライブラリも必要です。

存在する:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my $xml_file = 'file.xml';

my $xml = XMLin(
    $xml_file,
    KeepRoot => 1,
    ForceArray => 1,
);

$xml->{root}->[0]->{Model500}->[0] = "AAA\nBBB\nCCC\n";
$xml->{root}->[0]->{Model500}->[1] = "111\n222\n333\n";

XMLout(
    $xml,
    KeepRoot => 1,
    NoAttr => 1,
    OutputFile => $xml_file,
);

関連情報