2024. 2. 21. 15:41ㆍVB.NET/왕초보
지난 시간 HTML 파싱에 이어 이번 시간에는 XML 파싱에 대해 알아보자. XML 파싱은 VB.NET에서 기본 제공하는 기능이라 NuGet 패키지를 별도로 설치할 필요는 없다.
예제를 설명하기 위해 아이디, 이름, 점수를 나타내는 간략한 XML 문서를 하나 만들자.
<?xml version="1.0" encoding="UTF-8" ?>
<Student>
<Info>
<Id>user1</Id>
<Name>홍길동</Name>
<Score>80</Score>
</Info>
<Info>
<Id>user2</Id>
<Name>이순신</Name>
<Score>90</Score>
</Info>
<Info>
<Id>user3</Id>
<Name>김철수</Name>
<Score>100</Score>
</Info>
</Student>
이제 위 XML 문서를 파싱해보자. XML 파싱에서는 SelectNodes와 SelectSingleNode만 알면 웬만한 XML은 다 파싱이 가능하다.
우선 각 정보를 담을 구조체를 하나 선언하자.
Private Structure USER_INFO
Dim UserID As String
Dim UserName As String
Dim UserScore As Integer
End Structure
XML 문서에서 구하려고 하는 값을 의미하는 구조로 만들어주면 된다.
이제 아래 소스를 통해 XML을 파싱해보자.
Private Function ParseXML(pSrc As String) As List(Of USER_INFO)
Dim lpItem As USER_INFO, lpList As New List(Of USER_INFO)
Dim lpXMLDoc As New Xml.XmlDocument
lpXMLDoc.LoadXml(pSrc)
Dim lpInfoList As XmlNodeList = lpXMLDoc.SelectNodes("/Student/Info")
For Each lpNode As Xml.XmlNode In lpInfoList
lpItem.UserID = lpNode.SelectSingleNode("Id").InnerText
lpItem.UserName = lpNode.SelectSingleNode("Name").InnerText
lpItem.UserScore = Val(lpNode.SelectSingleNode("Score").InnerText)
lpList.Add(lpItem)
Next
Return lpList
End Function
1. 파라미터로 받아온 XML 문서를 XmlDocument를 통해 읽어온다.
Dim lpXMLDoc As New Xml.XmlDocument
lpXMLDoc.LoadXml(pSrc)
2. XML에서 사용자별로 반복되는 <Info> 태그의 목록을 구한다.
Dim lpInfoList As XmlNodeList = lpXMLDoc.SelectNodes("/Student/Info")
여기서 SelectNodes의 파라미터로 XML 문서의 절대경로가 사용되었다는 것에 주목하자. 문서를 lpXMLDoc에 넣으면 루트폴더가 Student이니 이 파라미터에서 맨앞에 슬래시를 빼고 상대주소인 "Student/Info"로 적어줘도 결과는 동일하다.
3. 이 목록을 루프 돌며 각 사용자의 정보를 리스트에 넣는다.
For Each lpNode As Xml.XmlNode In lpInfoList
lpItem.UserID = lpNode.SelectSingleNode("Id").InnerText
lpItem.UserName = lpNode.SelectSingleNode("Name").InnerText
lpItem.UserScore = Val(lpNode.SelectSingleNode("Score").InnerText)
lpList.Add(lpItem)
Next
이 루프를 돌면서 lpNode에는 <Info>...</Info>가 하나씩 들어가게 되니, <Info>의 하위 노드인 Id, Name, Score의 InnerText를 가져와서 변수에 넣어주고, 최종적으로 이 구조체 값을 리스트에 넣으면 되는 것이다.
마치며...
이처럼 XML 파싱은 비교적 간단하게 처리할 수 있다. 요즘은 XML 보다는 Json을 사용하는 추세이니 아래 Json 파싱 강좌도 한번 읽어보길 바란다.
'VB.NET > 왕초보' 카테고리의 다른 글
[VB.NET] OrElse 연산자가 뭐지? 첨보네 (1) | 2024.04.12 |
---|---|
VB.NET 금액에 천원 단위 콤마 넣는 신박한 방법 (0) | 2024.03.12 |
VB.NET Rnd, Randomize, Random 랜덤값 난수 사용하기 (0) | 2024.02.20 |
VB.NET HTML 파싱 - XPath를 사용한 HtmlAgilityPack 예제 (1) | 2024.02.19 |
VB.NET IIf 문과 If문의 차이점 (1) | 2024.02.13 |