XML Document 만들기 부터 Node 접근까지...


간단한 것이지만...
뭐 그리 뚜렷하게 풀어 설명해 놓은 것도 없기에...
그렇다고 자세히 설명 하는 것은 아니지만...

조그만 프로그램을 하나 만들고

소스를 디버깅하면서 아하... 이렇게 접근을 하는 구나 라고 느끼실 수 있을 것 같습니다.

만들 프로그램... 역시 그리 대단하지 않습니다.


 


폼하나 여시고 버튼세개를 올립니다.

비하인드 코드창에는 

Imports System.Xml

를 추가합니다.

XML 을 사용할 것이니 당연하겠죠..

그리고 



<?xml version="1.0" encoding="euc-kr"?>
<Filters />

이런 Filters Root Entity만 들어가 있는 XML 파일을 하나 만듭니다.
그리고 'UserFilter.xml" 이라는 이름으로 저장을 하시고

어플폴더에 복사를 해 놓습니다.

그리고 차례로 버튼을 더블클릭하여 이벤트 코드를 만드시고
아래의 소스를 복사해서 넣습니다.


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        doc = New XmlDocument()

        If (Not System.IO.File.Exists("Filter.xml")) Then
            doc.Load("UserFilter.xml")
        Else
            doc.Load("Filter.xml")
        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim root As XmlNode = doc.DocumentElement

        For k As Integer = 0 To 2 Step 1

            Dim xeFilter As XmlElement = doc.CreateElement("Filter")
            Dim xeFilterName As XmlElement = doc.CreateElement("Name")

            Dim xeColumnFilters As XmlElement = doc.CreateElement("ColumnFilters")

            For j As Integer = 0 To 5 Step 1

                Dim xeColumnFilter As XmlElement = doc.CreateElement("ColumnFilter")
                Dim xaColumnName As XmlAttribute = doc.CreateAttribute("ColumnName")
                Dim xaLogicalOperation As XmlAttribute = doc.CreateAttribute("LogicalOperation")
                xaColumnName.InnerText = "CoumnName" + j.ToString()
                xaLogicalOperation.InnerText = "LogicalOperation" + j.ToString()
                xeColumnFilter.Attributes.Append(xaColumnName)
                xeColumnFilter.Attributes.Append(xaLogicalOperation)

                For i As Integer = 0 To 3 Step 1

                    Dim xeFilterCondition As XmlElement = doc.CreateElement("FilterCondition")
                    Dim xaComparisonOperator As XmlAttribute = doc.CreateAttribute("ComparisonOperator")
                    Dim xaCompareValue As XmlAttribute = doc.CreateAttribute("CompareValue")
                    xaComparisonOperator.InnerText = "ComparisonOperator" + i.ToString()
                    xaCompareValue.InnerText = "CompareValue" + i.ToString()
                    xeFilterCondition.Attributes.Append(xaComparisonOperator)
                    xeFilterCondition.Attributes.Append(xaCompareValue)

                    xeColumnFilter.AppendChild(xeFilterCondition)
                Next

                xeColumnFilters.AppendChild(xeColumnFilter)
            Next
            xeFilter.AppendChild(xeFilterName)
            xeFilterName.InnerText = "woojja" + k.ToString()

            xeFilter.AppendChild(xeColumnFilters)

            root.AppendChild(xeFilter)

        Next
        doc.Save("Filter.xml")

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Dim root As XmlNode = doc.DocumentElement

        Dim xmlColumnFilterList As XmlNodeList = root.SelectNodes("Filter[Name='woojja1']")
        xmlColumnFilterList = root.SelectNodes("Filter[Name='woojja1']/ColumnFilters")
        xmlColumnFilterList = root.SelectNodes("Filter[Name='woojja1']/ColumnFilters/ColumnFilter")

        For Each columnFilterNode As XmlNode In xmlColumnFilterList

            Dim strColumnName As String = columnFilterNode.Attributes("ColumnName").Value
            Dim strLogicalOperation As String = columnFilterNode.Attributes("LogicalOperation").Value

            Dim filterConditionList As XmlNodeList = columnFilterNode.SelectNodes("FilterCondition")

            For Each filterConditionNode As XmlNode In filterConditionList

                Dim strComparisonOperator As String = filterConditionNode.Attributes("ComparisonOperator").Value
                Dim strCompareValue As String = filterConditionNode.Attributes("CompareValue").Value
            Next
        Next
    End Sub


흑... 복사해 놓고 보니 토나올것 같군요... ㅡㅡ'

코드창에 복사해 넣으면 그리 나쁘진 않습니다.

그리고 위 빨갛게 칠해 놓은 부분에 BreakPoint 를 거신후에..

버튼 1, 2, 3번을 차례로 클릭합니다.

1번에서 에러나시는 분들... 꼭있습니다.
걍 적당히 xml 파일을 이동시켜 놓으세요. ㅋㅋㅋ (알아서 좀 하세요.)

버튼 2번은 내용은 잘 보시면 XML 의 Element와 Attribute 를 어떻게 추가하는지 아실 수있습니다.

그리고 버튼 3번은 Element 와 Attribute 를 어떻게 접근하는 지 아실 수 있는데...

BreakPoint 를 찍으라는 이유는...

        root.SelectNodes("Filter[Name='woojja1']")
        root.SelectNodes("Filter[Name='woojja1']/ColumnFilters")
        root.SelectNodes("Filter[Name='woojja1']/ColumnFilters/ColumnFilter")

XPath 를 어떻게 사용할 수 있는지 사용방법을 보시라고...

역시 허접한 정리였습니다.





부디 행복한 고수되셔요...



woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


Root 2008-04-22 오전 10:18:20
비주얼베이직에서 XML 다루는 예제를 찾고 있었는데 많은 도움이 되었습니다. 감사해요 ^^
반응형

+ Recent posts