태그 보관물: diff

diff

두 개의 XML 파일을 어떻게 비교할 수 있습니까? 할 수 있습니까? 이상적으로는 엄격하게 구성하거나 공백 또는

Linux에서 두 XML 파일간에 차이점을 어떻게 생성 할 수 있습니까?

이상적으로는 엄격하게 구성하거나 공백 또는 속성 순서와 같은 것을 느슨하게 구성하고 싶습니다.

나는 종종 파일이 기능적으로 동일하다는 것을 신경 쓰지 만, 특히 XML 파일에 줄 바꿈이 많지 않은 경우 그 자체만으로는 사용하기가 어려울 것입니다.

예를 들어, 다음은 나에게 정말 괜찮을 것입니다.

<tag att1="one" att2="two">
  content
</tag>

<tag att2="two" att1="one">
  content
</tag>


답변

한 가지 방법은 두 XML 파일을 모두 정식 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 은 xml 헤더를 제거하는 반면 –c14n은 xml 헤더를 앞에 추가합니다.


답변

@ Juka Matilainen의 대답을 사용하려고했지만 공백에 문제가있었습니다 (파일 중 하나는 거대한 하나의 라이너였습니다). 를 사용 --format하면 공백 차이를 건너 뛸 수 있습니다.

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

참고 : vimdiffXML을 나란히 비교 하려면 명령을 사용하십시오 .


답변

Diffxml 은 기본 기능을 올바르게 제공하지만 구성에 대한 많은 옵션을 제공하지는 않습니다.

편집 : 프로젝트 Diffxml 이 2013 년부터 GitHub로 마이그레이션되었습니다.


답변

자식 요소의 순서를 무시하고 싶다면 다음과 같은 간단한 파이썬 도구를 작성했습니다 xmldiffs.

요소와 속성 순서를 무시하고 두 개의 XML 파일을 비교하십시오.

용법: xmldiffs [OPTION] FILE1 FILE2

추가 옵션이 diff명령에 전달됩니다 .

https://github.com/joh/xmldiffs 에서 다운로드 하십시오.


답변

XML 파일을 비교하는 내 Python 스크립트 xdiff.py 는 요소 순서와 달리 공백 또는 속성 순서의 차이를 무시합니다.

두 파일 1.xml과 를 비교하기 위해 2.xml다음과 같이 스크립트를 실행합니다.

xdiff.py 1.xml 2.xml

OP의 예에서는 아무것도 출력하지 않고 종료 상태를 반환합니다 0(구조적 또는 텍스트 적 차이가 없음).

구조적 으로 1.xml그리고 2.xml다른 경우에는 GNU diff의 통합 출력을 모방하고 종료 상태를 반환합니다 1. -a모든 컨텍스트 -n출력, 컨텍스트 없음 출력 및 -q출력 억제 (종료 상태를 여전히 리턴하는 중 ) 등 출력 제어를위한 다양한 옵션이 있습니다 .


답변

Beyond Compare 를 사용 하여 모든 유형의 텍스트 기반 파일을 비교합니다. Windows 및 Linux 용 버전을 생성합니다.