반응형
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를 통해서 유효성 검사가 가능합니다.
반응형
'엑셀 > VBA' 카테고리의 다른 글
[VBA] 외부 엑셀 파일의 시트를 현재 파일로 복사하고 시트 이름 바꾸기 (0) | 2025.04.19 |
---|---|
[VBA] 이상한 문자(?)의 정체와 제거 방법 (0) | 2025.04.19 |
CONCAT vs CONCATENATE 함수 비교와 구버전 Excel에서 대체하는 방법 (VBA 활용) (0) | 2025.04.13 |
Excel VBA로 셀의 텍스트에 서식을 적용하는 방법: 전체 vs 부분 서식 정리 (0) | 2025.04.12 |
VBA로 특정 열 중복 데이터 체크하기 (2) | 2024.11.09 |
댓글