可能なXMLベースのソリューションを探しています。別の問題。私も知っています受け入れられた回答、提案sed
とpython
ソリューション。
指定されたXMLフラグメントは次のとおりです。
<Names>
<Name>Luigi</Name>
<Name>Mario</Name>
<Name>Peach</Name>
</Names>
要素名をシーケンスなど<Name/>
に変更する必要があります。<Name1/>
<Name2/>
<Name3/>
次のように、要素値の名前を固定値に変更xmlstarlet
できます。<Name/>
xmlstarlet ed -u '//Name' -v 'Another' names.xml
<Names>
<Another>Luigi</Another>
<Another>Mario</Another>
<Another>Peach</Another>
</Names>
-x
()を使用して要素値を式に変更することもできます--expr
。
-x
ただし、要素名自体を編集する場合は、(--expr
)オプションを置き換える-v
()オプションがないため、--value
次のオプションは使用できません。
xmlstarlet ed -u '//Name' -x 'concat(., position())' names.xml
などのXML認識ツールを使用すると、xmlstarlet
入力XMLを変換して<Name/>
その要素を区別できますか?では、どうすればよいですか?
<Names>
<Name1>Luigi</Name1>
<Name2>Mario</Name2>
<Name3>Peach</Name3>
</Names>
答え1
XMLコマンドラインツールの私の経験には欠けていることがたくさんあります。ほとんど例外なく、私はあきらめてPythonを使用しています。つまり、basex
この問題を解決するためにこのユーティリティを使用できるXQueryソリューションがあると思います。以下はXQuery式です。
<!-- xml_rename_sequence.xquery -->
for $name at $position in doc('names.xml')//Name
return rename node $name as concat(name($name),$position)
これはXMLデータファイルです。
<!-- names.xml -->
<Names>
<Name>Luigi</Name>
<Name>Mario</Name>
<Name>Peach</Name>
</Names>
スクリプトを実行する方法は次のとおりです(ファイルを所定の位置に変更します)。
basex -u xml_rename_sequence.xquery
更新されたデータファイルは次のとおりです。
<!-- names.xml -->
<Names>
<Name1>Luigi</Name1>
<Name2>Mario</Name2>
<Name3>Peach</Name3>
</Names>
また、次のツールを試してみましたが、成功しませんでした。
以下は、XQueryでカウンターインクリメントについて見つけた投稿です。
私が使用した他の参考資料は次のとおりです。