Bash에서 XML 구문 분석

MD Aminul Islam 2023년6월20일
  1. xmllint를 사용하여 Bash에서 XML 구문 분석
  2. XMLStarlet을 사용하여 Bash에서 XML 구문 분석
Bash에서 XML 구문 분석

여전히 XML로 작업하지 않는 개발자를 찾는 것은 거의 불가능합니다. 데이터를 구조화하고 전송하는 데 널리 사용되는 인기 있는 마크업 언어입니다.

이 기사에서는 Bash를 통해 XML을 구문 분석하는 방법을 보여줍니다.

여기서는 두 개의 라이브러리에 대해 이야기하겠습니다. 첫 번째 라이브러리는 xmllint이고 두 번째 라이브러리는 XMLStarlet입니다.

작업하기 전에 먼저 설치해야 합니다.

xmllint를 사용하여 Bash에서 XML 구문 분석

XML 파일을 구문 분석하는 데 사용할 수 있는 가장 일반적인 라이브러리입니다. 하지만 사용하기 전에 라이브러리를 다운로드하여 설치해야 합니다.

이 라이브러리를 설치하려면 아래 명령을 실행해야 합니다.

sudo apt-get update -qq
sudo apt-get install -y libxml2-utils

apt-get을 사용하여 libxml2-utils 패키지를 설치해야 합니다.

MyXML.xml이라는 XML 파일이 있는 경우 아래 명령을 사용하여 쉽게 XML을 가져올 수 있습니다.

xmllint MyXML.xml

위 명령어를 실행하면 아래와 같은 결과가 나옵니다.

<?xml version="1.0"?>
<specification>
        <type>Laptop</type>
        <model>Macbook</model>
        <screenSizeInch>14</screenSizeInch>
</specification>

이 라이브러리에는 일부 옵션 또는 플래그가 포함되어 있습니다. 라이브러리에 사용 가능한 옵션은 아래에서 공유됩니다.

  1. --auto - 이 플래그는 테스트용 문서를 생성하기 위한 것입니다.
  2. --catalogs - 이 플래그는 SGML_CATALOG_FILES의 카탈로그를 사용하기 위한 것입니다. 그렇지 않으면 /etc/xml/catalog가 기본적으로 사용됩니다.
  3. --chkregister - 이 플래그는 노드 등록을 켜기 위한 것입니다.
  4. --compress - 이 플래그는 출력의 gzip 압축을 켜기 위한 것입니다.
  5. --copy - 이 플래그는 내부 복사 구현을 테스트하기 위한 것입니다.
  6. --c14n - 이 플래그는 stdout을 통해 구문 분석 결과를 직렬화하는 W3C XML 정규화(C14N)를 사용하기 위한 것입니다. 또한 결과에 주석을 유지합니다.
  7. --dtdvalid URL - 이 플래그는 유효성 검사를 위해 URL에 지정된 DTD를 사용하기 위한 것입니다.
  8. --dtdvalidfpi FPI - 이 플래그는 검증을 위한 공용 식별자 FPI가 지정하는 DTD를 사용하기 위한 것입니다. 이 플래그가 작동하려면 공용 식별자로 작동하는 카탈로그 내보내기가 필요합니다.
  9. --debug - 이 플래그는 파일을 구문 분석하기 위한 것입니다. 또한 문서의 메모리 내 버전인 주석이 달린 트리를 출력합니다.
  10. --debugent - 이 플래그는 문서에 정의된 엔터티를 디버깅하기 위한 것입니다.
  11. --dropdtd - 이 플래그는 출력에서 DTD를 제거하기 위한 것입니다.
  12. --dtdattr - 이 플래그는 외부 DTD를 가져옵니다. 또한 상속된 속성으로 트리를 채웁니다.
  13. --encode - 이 플래그는 주어진 인코딩으로 출력을 제공합니다.
  14. --format - 이 플래그는 출력을 다시 포맷하고 다시 들여씁니다.
  15. --help - 이 플래그는 xmllint의 사용법 요약을 인쇄합니다.
  16. --html - 이 플래그는 HTML 파서를 사용하기 위한 것입니다.
  17. --htmlout - 이 플래그는 결과를 HTML 파일로 표시합니다. 결과가 브라우저에서 표시/볼 수 있도록 결과 트리 출력 주변에 필요한 HTML 태그를 출력합니다.
  18. --삽입 - 이 플래그는 유효한 삽입을 테스트하기 위한 것입니다.
  19. --loaddtd - 이 플래그는 외부 DTD를 가져오기 위한 것입니다.
  20. --load-trace - 이 플래그는 stderr로 처리할 때 로드된 모든 문서를 표시합니다.
  21. --maxmem NNBYTES - 이 플래그는 파서 메모리 지원을 테스트하기 위한 것입니다. 여기서 NNBYTES는 라이브러리가 할당할 수 있는 최대 바이트 수입니다.
  22. --memory - 이 플래그는 메모리에서 구문 분석하기 위한 것입니다.
  23. --noblanks - 이 플래그는 무시할 수 있는 공백을 삭제합니다.
  24. --nocatalogs - 이 플래그는 카탈로그를 사용하지 않도록 지정합니다.
  25. --nocdata - 이 플래그는 동등한 텍스트 노드를 통해 CDATA 섹션을 대체합니다.
  26. --noent - 이 플래그는 엔티티 참조를 엔티티 값으로 대체합니다.
  27. --nonet - 이 플래그는 인터넷을 사용하여 DTD 또는 엔티티를 가져오지 않도록 지정합니다.
  28. --noout - 이 플래그는 출력을 억제합니다. xmllint는 기본적으로 결과 트리의 출력을 표시합니다.
  29. --nowarning - 이 플래그는 유효성 검사기 및/또는 파서에서 경고를 내보내지 않도록 지정합니다.
  30. --nowrap - 이 플래그는 HTML 문서 래퍼를 출력하지 않도록 지정합니다.
  31. --noxincludenod - 이 플래그는 XInclude 처리를 수행하지만 XInclude 시작 및 종료 노드를 생성하지 않도록 지정합니다.
  32. --nsclean - 이 플래그는 중복 네임스페이스 선언을 제거하기 위한 것입니다.
  33. --output FILE - 이 플래그는 xmllint가 구문 분석 결과를 저장하는 파일 경로를 정의합니다.
  34. --path "PATH(S)" - 이 플래그는 DTD 또는 엔터티를 로드하기 위해 PATHS에 의해 지정된 Filesystem 경로 목록(콜론으로 구분되거나 공백으로 구분됨)을 사용하기 위한 것입니다. 여기서 공백으로 구분된 목록은 따옴표로 묶여 있습니다.
  35. --pattern PATTERNVALUE - 이 플래그는 판독기 인터페이스와 함께 사용할 수 있는 패턴 인식 엔진을 실행하기 위한 것입니다. 디버깅에도 사용됩니다.
  36. --postvalid - 이 플래그는 구문 분석이 완료된 후 유효성을 검사하기 위한 것입니다.
  37. --푸시 - 이 플래그는 푸시 모드를 활성화합니다.
  38. --recover - 이 플래그는 유효하지 않은 문서의 구문 분석 가능한 부분을 출력하기 위한 것입니다.
  39. --relaxng SCHEMA - 이 플래그는 유효성 검사를 위해 SCHEMA라는 RelaxNG 파일을 사용합니다.
  40. --repeat - 이 플래그는 타이밍 또는 프로파일링을 위해 100번 반복합니다.
  41. --스키마 - 이 플래그는 SCHEMA로 알려진 W3C XML 스키마 파일을 사용합니다.
  42. --shell - 탐색 쉘을 실행합니다.
  43. --stream - 이 플래그는 API를 스트리밍하기 위한 것입니다.
  44. --testIO - 이 플래그는 사용자 입력/출력 지원을 테스트합니다.
  45. --timing - 이 플래그는 xmllint가 다양한 단계를 수행하는 데 걸리는 시간에 대한 정보를 출력합니다.
  46. --valid - 이 플래그는 문서의 유효성을 검사합니다.
  47. --version - 이 플래그는 라이브러리의 버전을 표시합니다.
  48. --walker - 이 플래그는 walker 모듈을 테스트합니다.
  49. --xinclude - 이 플래그는 XInclude 처리를 수행합니다.
  50. --xmlout - 이 플래그는 주로 --html과 함께 사용됩니다. XML 직렬 변환기로 문서를 저장합니다. 주로 HTML에서 XHTML로 변환하는 데 사용됩니다.

XMLStarlet을 사용하여 Bash에서 XML 구문 분석

XML 문서를 구문 분석하기 위한 또 다른 인기 있는 라이브러리는 XMLStarlet입니다. 라이브러리의 기본 명령은 xmlstarlet입니다.

이 라이브러리를 설치하려면 루트로 아래 명령을 실행해야 합니다.

sudo dnf install xmlstarlet

여기에는 XML 파일의 유효성 검사, 변환 또는 쿼리를 보다 쉽게 해주는 유용한 옵션이 포함되어 있습니다. 라이브러리의 가장 간단한 명령을 통해 XML 파일을 쉽게 가져올 수 있습니다.

xmlstarlet format MyXML.xml

위의 명령을 실행하면 XML 파일의 내용이 아래와 같이 출력되는 것을 볼 수 있습니다.

<?xml version="1.0"?>
<specification>
        <type>Laptop</type>
        <model>Macbook</model>
        <screenSizeInch>14</screenSizeInch>
</specification>

이 기사에서 사용된 모든 코드는 Bash로 작성되었습니다. Linux Shell 환경에서만 작동합니다.

MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn