Чтение XML в 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 чтобы получить каждый элемент и вернуть определенное значение, которое я хочу? Per se, я хотел бы вернуться <number> (при <store>) в textbox1, и <emailbody> (при <emailsettings>) в textbox2.

помогите pleaseeeeee! Спасибо :)

4 ответов


Ах, идеальный пример для демонстрации мощных функций XML VB.NET с рамками 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

выходы:

Number: 0323
Body: package received

вот консольное приложение, использующее 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

результаты будут:

Number=0323
emailbody=package received

Number=0323
emailbody=package received

можно использовать сериализацию XML. Создайте классы, представляющие структуру XML, и используйте класс сериализации XML для десериализации данных. После этого вы можете использовать данные в своем приложении.

Ниже приведена ссылка на пример из MSDN:

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


Если вы знакомы с наборами данных и datatables, это простой способ сделать это:

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

наборы данных могут читать любой XML. Я даже использую это для вызова XML-служб с поддержкой rest.