2010-02-15 61 views
7

Tôi đã googled cho giờ cuối cùng hoặc lâu hơn mà không có may mắn (tôi muốn nghĩ rằng tôi là một googler tuyệt vời quá!), Vì vậy, ở đây tôi.Đọc XML trong VB.net

Tôi có một file XML mà tôi đang sử dụng để cài đặt chương trình của tôi, nó trông giống như vậy:

<?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> 

Làm thế nào tôi có thể sử dụng vb.net để có được mỗi yếu tố và trả về một giá trị cụ thể mà tôi muốn ? Mỗi lần, tôi muốn trả lại <number> (dưới <store>) trong hộp văn bản 1 và <emailbody> (dưới <emailsettings>) trong hộp văn bản2.

Help pleaseeeeee! Cảm ơn :)

Trả lời

18

Ah, một ví dụ hoàn hảo cho khoe các tính năng XML mạnh mẽ của VB.NET với Framework 3.5:

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 

sản lượng:

Number: 0323 
Body: package received 
+1

Đây là một câu trả lời tuyệt vời, WAY tốt hơn câu trả lời tuần tự hóa của tôi. Câu trả lời của bạn là những gì tôi đang tìm kiếm về câu hỏi của tôi: http://stackoverflow.com/questions/2253900/generics-and-duck-typing-xml-in-net Vui lòng thêm câu trả lời này cho câu hỏi của tôi và tôi sẽ chấp nhận. – Achilles

+0

Splendid, nhưng nếu bạn có nhiều số cửa hàng khác dưới dạng tệp thì có thể là một tệp cấu hình cho nhiều cửa hàng? –

+0

@AhmedNazmy: 'Dành cho mỗi cửa hàng trong xml. . '. Sau đó, bên trong vòng lặp, truy cập 'store. .Giá trị'. – Heinzi

1

Bạn có thể sử dụng XML Serialization. Tạo các lớp đại diện cho cấu trúc XML của bạn và sử dụng Lớp tuần tự hóa XML để deserialize dữ liệu. Một khi bạn đã làm điều đó bạn có thể sử dụng dữ liệu trong ứng dụng của bạn.

Dưới đây là một liên kết đến một ví dụ từ MSDN:

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

+0

+1. Tôi sử dụng tất cả thời gian khi tôi phải đọc/ghi XML tôi đã kiểm soát. – OregonGhost

5

Dưới đây là một ứng dụng Console sử dụng sự hỗ trợ Literal VB.Net XML.

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 

Kết quả sẽ là:

Number=0323 
emailbody=package received 

Number=0323 
emailbody=package received 
+0

+1, vì tôi không hiểu downvote ... – Heinzi

+0

Cảm ơn bạn đã +1. :-) – Rick

+0

+1 để tận dụng các tính năng ngôn ngữ tuyệt vời – Jay

0

Nếu bạn đã quen thuộc với bộ dữ liệu và datatables, đây là một cách dễ dàng để làm điều đó:

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

DataSet có thể đọc bất kỳ XML. Tôi thậm chí còn sử dụng điều này để gọi các dịch vụ XML được kích hoạt lại.