XMLファイルからタグを削除する

XMLファイルからタグを削除する

私のファイルには識別できないデータが含まれています。次のように教えてください。

<?xml version="1.0" encoding="UTF-8" ?><ns0:collection
xmlns:ns0="http://namspace/Service/1.0"><Record>
.
.</Record></ns0:collection>

N個のファイルをマージして1つのファイルを作成する必要があります。したがって、次のことを行う必要があります。

  1. </ns0:collection>最初のファイルから閉じるタグを削除するだけです。
  2. 次の(n-1)個のファイルの<?xml version="1.0" encoding="UTF-8" ?><ns0:collection xmlns:ns0="http://namspace/Service/1.0">合計を削除する</ns0:collection>
  3. 最後のファイルのみを削除し、<?xml version="1.0" encoding="UTF-8" ?><ns0:collection xmlns:ns0="http://namspace/Service/1.0">すべてマージする必要があります。

コマンドを使用して最初のファイルを処理しようとしましたが、sed結果が出ませんでした。 "merged.xml"は空でした。

sed '/<\/ns0:collection>/d' $file1 > merged.xml

どんな提案がありますか?

ベストアンサー1

useのみを指定していないsedため、アクセス権がある場合xml_grep(参照コマンドラインから複数のXMLファイルをマージする、2番目の答え)、これはあなたに多くの負担を与え、次の簡単なマージ操作を単一のコマンドで実行できるため、これをお勧めします。

xml_grep --cond Record --wrap "ns0:collection" --descr 'xmlns:ns0="http://namespace/Service/1.0"' --encoding "UTF-8" *.xml

テストファイル:

テスト.xml

<?xml version="1.0" encoding="UTF-8" ?><ns0:collection
xmlns:ns0="http://namespace/Service/1.0""><Record>
Test
</Record></ns0:collection>

テスト1.xml

<?xml version="1.0" encoding="UTF-8" ?><ns0:collection
xmlns:ns0="http://namespace/Service/1.0"><Record>
Test 1<a>a</a><b c="c">d</b>
</Record></ns0:collection>

結果

<?xml version="1.0" encoding="UTF-8" ?>
<ns0:collection xmlns:ns0="http://namespace/Service/1.0">
<Record>
Test 1<a>a</a><b c="c">d</b></Record><Record>
Test
</Record>
</ns0:collection>

XMLファイルを扱うときに構造を台無しにする可能性がsed非常に高く、誤った形式のXML文書になりやすいので、XML認識ツールを使用することをお勧めします!

おすすめ記事