【问题标题】:Read XML in VB.net在 VB.net 中读取 XML
【发布时间】:2026-01-26 18:25:01
【问题描述】:

我在过去的一个小时内搜索了谷歌,但没有运气(我想我也是一个很棒的谷歌用户!),所以我来了。

我有一个用于程序设置的 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 获取每个元素并返回我想要的特定值?就其本身而言,我想在 textbox1 中返回 &lt;number&gt;(在 &lt;store&gt; 下),在 textbox2 中返回 &lt;emailbody&gt;(在 &lt;emailsettings&gt; 下)。

请帮忙!谢谢:)

【问题讨论】:

    标签: xml vb.net


    【解决方案1】:

    啊,一个完美的例子,展示了带有 Framework 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
    

    【讨论】:

    • 这是一个很好的答案,比我的序列化答案要好得多。你的答案就是我在我的问题上寻找的答案:*.com/questions/2253900/… 请将此答案添加到我的问题中,我会接受。
    • 很棒,但是如果您有多个其他商店作为文件可能是多个商店的一个配置文件怎么办?
    • @AhmedNazmy:For Each store in xml.&lt;config&gt;.&lt;store&gt;。然后,在循环内,访问store.&lt;number&gt;.Value
    【解决方案2】:

    这是一个使用 VB.Net XML Literal 支持的控制台应用程序。

    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
    

    【讨论】:

      【解决方案3】:

      您可以使用 XML 序列化。创建代表您的 XML 结构的类并使用 XML 序列化类来反序列化数据。完成后,您可以在应用程序中使用数据。

      下面是一个来自 MSDN 的示例链接:

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

      【讨论】:

      • +1。当我必须读/写我控制的 XML 时,我一直使用它。
      【解决方案4】:

      如果您熟悉数据集和数据表,这是一种简单的方法:

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

      DataSet 可以读取任何 XML。我什至用它来调用支持 REST 的 XML 服务。

      【讨论】: