以下のテキストを見てください。複数行のテキストをどのように変更できますか?
<Model500>
ABC
BCD
CDE
</Model500>
<Model500>
123
234
345
</Model500>
出力は次のとおりです。
<Model500>
AAA
BBB
CCC
</Model500>
<Model500>
111
333
555
</Model500>
sed
Bashで動作するコマンドラインユーティリティを使用してこれを実行したいと思います。これを行うにはループを使用する必要がありますか?
答え1
適切に使用するXMLツールはケースに入っており、xmlstarlet良いです:
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ファイルを切り取ってください。
参考²
また、使用することができますPython、真珠、ルビーちょっと待って...そして適切な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,
);