본문 바로가기
엑셀/VBA

Excel VBA로 XML 유효성 검사 + XML 타입 비교까지 정리!

by 큐브빌드 2025. 4. 15.
반응형

 

 

XML은 데이터를 계층적 구조로 표현할 수 있어 많은 시스템 간 데이터 교환에 활용됩니다.
하지만 구조가 올바르지 않으면 오류가 발생하거나, 시스템이 제대로 동작하지 않게 되죠.
이번 글에서는 VBA를 활용한 XML 유효성 검사 방법과 함께, 자주 비교되는 속성 기반 XML vs. 요소 기반 XML의 차이도 설명해 드리겠습니다.


✅ XML 유효성 검사란?

XML 유효성 검사는 XML 문서가 **XSD (XML Schema Definition)**에 정의된 규칙을 만족하는지 확인하는 과정입니다.
예를 들어, <age>에는 숫자만 입력되게 하거나, 특정 필드는 필수로 존재해야 함을 검사할 수 있습니다.


🧾 XML 타입 비교

XML에는 데이터를 표현하는 두 가지 주요 방식이 있습니다.

🔹 A 타입: 속성 기반

<a id="1" value1="a" value2="b"/>
  • 데이터가 태그의 속성(attribute)으로 표현됨
  • 간결하고 빠르게 읽기 쉬움
  • 단점: 구조화된 계층을 표현하기 어렵고, 확장성 부족

🔸 B 타입: 요소 기반

<a>
    <id>1</id>
    <value1>a</value1>
    <value2>b</value2>
</a>
  • 각 데이터가 태그(요소)로 표현됨
  • 구조화, 확장성에 유리
  • 단점: 길어지고 가독성이 떨어질 수 있음

🛠 VBA로 XML 유효성 검사하기

📁 준비물

  • sample.xml: 검사할 XML
  • sample.xsd: 스키마 정의 파일

※ 아래 파일을 사용하셔도 되고 직접 파일을 만드셔도 상관없습니다.

XML_Validation_Sample.zip
0.00MB

🧑‍💻 VBA 코드

Sub ValidateXML()
    Dim xml As Object
    Dim xsdPath As String
    Dim xmlPath As String

    ' 파일 경로 설정
    xmlPath = "C:\Test\sample.xml"
    xsdPath = "C:\Test\sample.xsd"

    ' XML Document 생성
    Set xml = CreateObject("MSXML2.DOMDocument.6.0")
    xml.async = False
    xml.validateOnParse = True
    xml.schemas.Add "", xsdPath

    If xml.Load(xmlPath) Then
        On Error Resume Next
        xml.Validate
        If Err.Number <> 0 Then
            MsgBox "❌ 유효성 검사 실패: " & Err.Description, vbExclamation
        Else
            MsgBox "✅ XML이 유효합니다!", vbInformation
        End If
        On Error GoTo 0
    Else
        MsgBox "🚫 XML 로딩 실패", vbCritical
    End If
End Sub

📄 A 타입과 B 타입 예시 및 XSD

✔ A 타입 XML (attribute 기반)

<a id="1" value1="a" value2="b"/>

✔ A 타입용 XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="a">
    <xs:complexType>
      <xs:attribute name="id" type="xs:integer" use="required"/>
      <xs:attribute name="value1" type="xs:string" use="required"/>
      <xs:attribute name="value2" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

✔ B 타입 XML (element 기반)

<a>
    <id>1</id>
    <value1>a</value1>
    <value2>b</value2>
</a>

✔ B 타입용 XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="a">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="id" type="xs:integer"/>
        <xs:element name="value1" type="xs:string"/>
        <xs:element name="value2" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

📌 요약정리

구분 속성 기반 (A 타입) 요소 기반 (B 타입)

구조 간결함 명확한 계층 구조
확장성 낮음 높음
XSD 적용 가능하지만 제한적 가장 권장
데이터 표현 단순 값 중심 문서화, 메타데이터 포함

 

이렇게 했을 때 엑셀 VBA를 통해서 유효성 검사가 가능합니다.

반응형

댓글