2010-02-15 2 views
7

나는 지난 1 시간 동안 운이 없다고 봤는데 (나는 또한 내가 훌륭한 googler라고 생각하고 싶다!), 그래서 나는 여기있다.VB.net에서 XML 읽기

<?xml version="1.0" encoding="utf-8"?> 
<config> 
    <store> 
     <number>0323</number> 
     <address>address</address> 
     <phone>phone</phone> 
    </store> 

    <emailsettings> 
     <emailfrom>emailfrom</emailfrom> 
     <emailpass>pass</emailpass> 
     <emailsubject>received</emailsubject> 
     <smtpserver>smtp.gmail.com</smtpserver> 
     <smtpport>587</smtpport> 
     <enablessl>true</enablessl> 
     <emailbody>package received</emailbody> 
    </emailsettings> 
    <dbconfig> 
     <dbpath>path</dbpath> 
    </dbconfig> 
</config> 

나는 각 요소를 얻을 내가 원하는 특정 값을 반환 vb.net 사용 방법 :

나는이 같은 모습, 내 프로그램 설정을 사용하고 XML 파일이 ? 본질적으로 textbox1에 <number>()을, textbox2에 <emailbody> (<emailsettings>)을 반환하고 싶습니다.

도움말 pleaseeeeee! 감사합니다 :)

답변

18

아, 프레임 워크 3.5과 VB.NET의 강력한 XML 기능을 보여주는 완벽한 예 :

Sub Main() 
    Dim xml = XDocument.Load("config.xml") 
    Console.WriteLine("Number: " & xml.<config>.<store>.<number>.Value) 
    Console.WriteLine("Body: " & xml.<config>.<emailsettings>.<emailbody>.Value) 
End Sub 

수율 :

Number: 0323 
Body: package received 
당신이 데이터 세트 및 datatables에 익숙하다면
+1

이것은 내 대답에 대한 답변보다 훌륭한 답변입니다. 귀하의 대답은 내가 내 질문에 대한 찾고 : http://stackoverflow.com/questions/2253900/generics-and-duck-typing-xml-in-net 제 질문에이 답변을 추가하십시오 그리고 나는 동의합니다. – Achilles

+0

Splendid,하지만 파일이 여러 저장소에 대한 하나의 구성 파일이 될 수 있으므로 다른 저장소의 수가 여러 개인 경우 어떻게해야합니까? –

+0

@AhmedNazmy :'xml의 각 상점에 대해. . '. 그런 다음 루프 내부에서'store. . 값 '입니다. – Heinzi

1

XML 직렬화를 사용할 수 있습니다. XML 구조를 나타내는 클래스를 만들고 XML 직렬화 클래스를 사용하여 데이터를 deserialize하십시오. 이 작업을 완료하면 애플리케이션의 데이터를 사용할 수 있습니다.

http://msdn.microsoft.com/en-us/library/ms950721.aspx

+0

+1. 나는 내가 통제하에있는 XML을 읽거나 쓰지 않으면 안되는이 모든 것을 사용한다. – OregonGhost

5

가 여기 VB.Net XML 리터럴 지원을 사용하여 콘솔 응용 프로그램입니다 : 아래

은 MSDN에서 예에 대한 링크입니다.

Module Module1 

    Sub Main() 

     Dim xElem = <config> 
         <store> 
          <number>0323</number> 
          <address>address</address> 
          <phone>phone</phone> 
         </store> 

         <emailsettings> 
          <emailfrom>emailfrom</emailfrom> 
          <emailpass>pass</emailpass> 
          <emailsubject>received</emailsubject> 
          <smtpserver>smtp.gmail.com</smtpserver> 
          <smtpport>587</smtpport> 
          <enablessl>true</enablessl> 
          <emailbody>package received</emailbody> 
         </emailsettings> 
         <dbconfig> 
          <dbpath>path</dbpath> 
         </dbconfig> 
        </config> 

     Dim number = xElem.<store>.<number>.Value 
     Dim emailbody = xElem.<emailsettings>.<emailbody>.Value 

     Console.WriteLine(String.Format("Number={0}", number)) 
     Console.WriteLine(String.Format("emailbody={0}", emailbody)) 
     Console.ReadLine() 

     '--- What it'd look like if you loaded from a file using XDocument.Load 
     Dim xDoc = XDocument.Load(New IO.StringReader(xElem.ToString)) 
     number = xDoc.Root.<store>.<number>.Value 
     emailbody = xDoc.Root.<emailsettings>.<emailbody>.Value 

     Console.WriteLine(String.Format("Number={0}", number)) 
     Console.WriteLine(String.Format("emailbody={0}", emailbody)) 
     Console.ReadLine() 


    End Sub 

End Module 

결과는 다음과 같습니다

Number=0323 
emailbody=package received 

Number=0323 
emailbody=package received 
+0

+1, 내가 downvote을 이해하지 못하기 때문에 ... – Heinzi

+0

+1 주셔서 감사합니다. :-) – Rick

+0

+1 멋진 언어 기능을 활용하기 위해 +1 – Jay

0

이 그것을 할 수있는 쉬운 방법은 다음과 같습니다

Dim DS As New DataSet 
DS.ReadXml("Data.xml") 

데이터 집합은 어떤 XML을 읽을 수 있습니다. 나는 이것을 사용하여 rest-enabled XML 서비스를 호출한다.