티스토리 뷰

728x90

최근의 프로그램들은 설정 파일이나 데이터를 XML 파일에 저장하는 경우가 많다. 그런데, XML 파일 내용이 동일한 것 같은데도 해당 파일을 기반으로 동작하는 서로 다른 두 개의 프로그램이 다르게 동작하는 현상을 만났다.

 

 

차이점이라면 하나는 파일이 읽기 좋게 들여 쓰기가 잘 되어 있는 것이고, 다른 하나는 사람이 보는 파일이 아니므로 XML 규칙에 맞게 공백을 최소화한 것이다. XML이나 HTML에서 태그 규칙 말고 태그 외부의 공백은 구조와 내용에 아무런 영향을 미치지 않는다.

 

이런 상황에서 1만 라인이 넘는 파일 내용을 사람의 눈으로 비교할 수는 없는 노릇이고 diff 도구를 사용하면 좋겠지만 공백하나라도 차이가 있으면 서로 틀린 것으로 간주하여 메시지를 출력하므로 이런 상황에서는  단순 diff 도구는 적절하지 않다.

 

https://github.com/joh/xmldiffs

 

아주 간단한 도구를 하나 찾았는데 파이썬으로 제작한 것으로 필자의 경우 /usr/bin/xmldiff로 파일을 생성하여 파이썬 코드를 저장해서 사용했다. 파이썬 코드 하나만 있으면 된다.

 

원래의 코드는 첫 라인의 쉘 명령에 python으로 되어 있었는데, 필자의 환경에서는 python3만 설치되어 있어서 python3로 변경해 주고 "sudo chmod 755 /usr/bin/xmldiff"로 실행 권한을 주여해 주었다.

 

$ xmldiff jbase/plc.xml jtest/plc.xml 
--- jbase/plc.xml
+++ jtest/plc.xml
@@ -1,5 +1,5 @@
 <{http://www.plcopen.org/xml/tc6_0201}project>
-  <{http://www.plcopen.org/xml/tc6_0201}contentHeader modificationDateTime="2021-03-25T12:10:40" name="jbase">
+  <{http://www.plcopen.org/xml/tc6_0201}contentHeader modificationDateTime="2024-07-13T17:59:19" name="jbase">
     <{http://www.plcopen.org/xml/tc6_0201}coordinateInfo>
       <{http://www.plcopen.org/xml/tc6_0201}fbd>
         <{http://www.plcopen.org/xml/tc6_0201}scaling x="10" y="10"/>

 

준비한 xmldiff로 두 개의 XML 파일을 비교해 보니 결과적으로 변경 일자 외에는 바뀐 것이 하나도 없었다. 한 프로그램의 오동작으로 판명되었다.

 

728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함