PROGRAMMING WORKSHOP

.Net FrameWork,VB.Net | PictureBox, LINQ to XML

System.Xml.Linq.XElement ,LINQ를 사용하여 필요한 것만가져오기..

XML문을 다루는 것은 참으로 현대정보관리에 있어서 유용하다
그리고 XML문에서 LINQ문을 사용하여 원하는 정보의 토막만 얻어오게 한다면
금상첨화다
앞의 페이지의 것을 훨씬 빠르고, 간단하게 코딩해보자
실은 멀리 써버에 있는 XML정보를 가져 오기 위하여
System.XML.Linq 네임스페이스에는 두개의 대표적인 개체가 있다
하나는
System.XML.Linq.XDocument
다른 하나는
Sytem.XML.Linq.XElement
같은 정보를 가져 오지만, XDocument는 단어가 의미하는 그대로
XML문서를 통째로 가져 오는 것이고
XElement는 단어가 의미하는 그대로 XML문서에서 필요한 토막만
가져올수 있는 개체이다



지금 다루는 소루션에 맞는 적절한 개체는 XElement개체..
이것과 LINQ를 적절히 사용하는 것을 숙달시켜보자
XML의 정보를 LINQ로 원하는 정보만 가져온다..
아래와 같이..

Dim oElements As System.Xml.Linq.XElement = XElement.Load(XML_FILE)
'' 찾아오려는 값은 하나의 XML 노드이지만 집합체로 변수를 선언하여야 한다
'' 왜냐면 LINQ문은 모두 집합체를 가져오기위한 도구이니까..결과물은 집합체여야 한다
''아래는 LINQ문...

Dim oMyNode As IEnumerable(Of XElement) =
	From Q In oElements.Elements
	Where Q.<talk>.Value = sTalk
	Select Q
 
''위와 같이 하면 조건절(Where) 에서 XML 노드중 talk 라는 노드명의 값이 변수 sTalk일 경우
''골라서 가져오게 되고 이것이 집합체 변수 oMyNode에 담기게 되겠지..
Dim sImgFile = oMyNode.Descendants("file").Value.Trim

''위의 한줄은 아래와 같이 해도된다
''Dim sImgFile = oMyNode.<file>.Value.Trim

''맨위에서 전체 xml정보에서 아래의 data라는 Node를 가져오고,
''이 가져온 Node중에서 file 노드의 값, 즉 그림화일의 서버주소를 알아내어 그림상자에 채우는 것
''<data>
''  <talk>remember today is</talk>
''  <file>https://i.pinimg.com/564...|https://i.pinimg.com/564x/a9/0b/....</file>
''	<date>2017/10/12</date>
''    <category>peace</category>  
''    <desc>remembertodayis.xml</desc>
''</data>
Me.PictureBox1.Load(sImgFile.Split("|")(0).Trim)
Me.PictureBox2.Load(sImgFile.Split("|")(1).Trim)

이번 화일은 목록을 집합체 전역변수에 둘 필요도 없이
그냥 목록상자를 이용하여 이곳에 정보를 모아두면서, 사용자가 선택할수 있게 하고
선택하면 이벤트발생에 따라서
직접 서버의 정보를 LINQ로 XML문에서 원하는 것만 찾어오게 하면
코딩도 간단하고, 효율적이 될 것이다
화일의 모듈에 해설달았으니 잘 응용하시기를..

***[LOG-IN]***



사용하고 있는 원본 xml 화일은 아래 Data라는 Node가 반복하여 만들어진 것

<data>
   <talk>a goal without a plan</talk>
   <file>https://i.pinimg.com/564x/3e/8....jpg|
   https://i.pinimg.com/564x/7b/f.....jpg</file>
   <date>2017/10/20</date>
   <category>goal</category>
   <desc>agoalwithoutaplan.xml</desc>
   </data>

이것을 하나, 하나 혹은 목록에서 찾아서 해당되는 Node를
XElement에 불러들여서 사용했다

이 중에서 별도의 xml화일(위의 빨강색부분)을 또 하나 불러 들여서
별도로 xml화일로 보관된 텍스트정보를 가져다가 표현해야 한다
목록정보만들 표현하는 xml화일과 목록정보중의 하나인 화일명과 같이
긴문장의 정보는 별도의 화일로 보관하는 것이 xml화일의 관리요령이고, 데이타의 관리요령이다
window폼에 텍스트상자를 하나 추가하고
이 텍스트상자에 해당 xml문서의 내용인 텍스트정보를 나타나게 하자