2

XML ファイルの最後の行をタグに置き換えるスクリプトを作成するためのヘルプを探しています。私は数百のファイルを持っているので、それらをループで処理するものを探しています。次のように、ファイルの名前を順番に変更することができました。

posts1.xml
posts2.xml
posts3.xml

等...

ループしやすいように。しかし、これを行うスクリプトの書き方がわかりません。私は Linux と Windows のどちらでも使用できます (ただし、この種の作業には Linux の方が適していると思います)。

4

4 に答える 4

3

したがって、すべてのファイルに行を追加する場合は、次のようにします。

sed -i '$a<YOUR_SHINY_NEW_TAG>' *xml

最後の行を置き換えるには:

sed -i '$s/.*/<YOUR_SHINY_NEW_TAG>/' *xml

ただしsed、 xmlを変更するための理想的なツールで

于 2012-08-07T16:17:37.653 に答える
3

XMLStarletは、XML の解析と操作を実行するためのコマンド ライン ツールキットです。XML 対応のツールキットとして、XML 構造、文字エンコーディング、およびエンティティ置換を尊重することに注意してください。

ドキュメントを変更する方法については、edコマンドを参照してください。これを標準の bash ループでラップできます。

たとえば、一連の<elem>s で構成されるドキュメントでは、次の を追加できます<added>5</added>

mkdir new
for x in *.xml; do
    xmlstarlet ed -a "//elem[count(//elem)]" -t elem -n added -v 5 $x > new/$x
done
于 2012-08-07T16:07:13.307 に答える
2

を使用した Linux の方法sed:

ファイルの最後の行をその場で編集するには、次を使用できますsed

sed -i '$s_pattern_replacement_' filename

行全体を「置換」に変更するには、 を使用します$s_.*_replacement__anyの inは必ずreplacementaでエスケープしてください\

ファイルをループするには、次を使用しますfor

for f in /path/posts*.xml; do sed -i '$s_.*_replacement_' $f; done

ただし、XML 構造は改行の影響を受けないのに対し、XML 構造を認識しないため、これは汚い方法です。ファイルの最後の行に、期待どおりの内容が含まれていることを確認する必要があります。

于 2012-08-07T16:11:41.667 に答える
0

Linux、Windows、MacOSのいずれを使用していても、ほとんど違いはありません。

問題は、どの言語を使用したいのかということです。

以下は、c#の例です(最適化されていませんが、speudocodeとして読み取ってください)。

string rootDirectory = @"c:\myfiles";
var files = Directory.GetFiles(rootDirectory, "*.xml");

foreach (var file in files)
{
  var lines = File.ReadAllLines(file);
  lines[lines.Length - 1] = "whatever you want here";
  File.WriteAllLines(file, lines);
}

これをコンパイルして、Windows、Linuxなどで実行できます。

または、Pythonでも同じことができます。

もちろん、このメソッドは実際にはXMLを解析しませんが、最後の行を置き換えたいだけですか?

于 2012-08-07T16:10:43.713 に答える