GNU/Linux >> Linux の 問題 >  >> Linux

2 つの XML ファイルを比較するにはどうすればよいですか?

1 つの方法は、最初に両方の XML ファイルを Canonical XML に変換し、diff を使用して結果を比較することです。 .たとえば、xmllint を使用して XML を正規化できます。

$ xmllint --c14n one.xml > 1.xml
$ xmllint --c14n two.xml > 2.xml
$ diff 1.xml 2.xml

またはワンライナーとして。

$ diff <(xmllint --c14n one.xml) <(xmllint --c14n two.xml)

Jukka の回答はうまくいきませんでしたが、Canonical XML を指していました。どちらでもない --c14n または --c14n11 属性をソートしましたが、--exc-c14n が見つかりました スイッチは属性をソートしました。 --exc-c14n はマニュアル ページには記載されていませんが、コマンド ラインでは「W3C 独自の標準形式」として説明されています。

$ xmllint --exc-c14n one.xml > 1.xml
$ xmllint --exc-c14n two.xml > 2.xml
$ diff 1.xml 2.xml

$ xmllint | grep c14
    --c14n : save in W3C canonical format v1.0 (with comments)
    --c14n11 : save in W3C canonical format v1.1 (with comments)
    --exc-c14n : save in W3C exclusive canonical format (with comments)

$ rpm -qf /usr/bin/xmllint
libxml2-2.7.6-14.el6.x86_64
libxml2-2.7.6-14.el6.i686

$ cat /etc/system-release
CentOS release 6.5 (Final)

警告 --exc-c14n --c14n は xml ヘッダーを削除しますが、存在しない場合は xml ヘッダーを先頭に追加します。


@Jukka Matilainen の回答を使用しようとしましたが、空白に問題がありました (ファイルの 1 つは巨大なワンライナーでした).Using --format 空白の違いをスキップするのに役立ちます。

xmllint --format one.xml > 1.xml  
xmllint --format two.xml > 2.xml  
diff 1.xml 2.xml  

注:vimdiff を使用してください XML を並べて比較するためのコマンド。


Linux
  1. Linuxで2つのテキストファイルを結合する方法

  2. 特定のサブパスを持つファイルを見つける方法は?

  3. 2 つのディレクトリ ツリーが与えられた場合、内容が異なるファイルを見つけるにはどうすればよいですか?

  1. Linuxで2つのファイルの違い(追加のみ)を取得する方法

  2. 2 つのファイルを 1 行ずつ一貫してマージする方法

  3. 2 つの CSV ファイルを結合するには?

  1. Linux で同じサイズの 2 つのファイルのバイナリ diff を実行するにはどうすればよいですか?

  2. ファイルシステム上のすべてのハードリンクされたファイルを見つけるにはどうすればよいですか?

  3. Linuxでxargsを使用してファイルを移動するにはどうすればよいですか?