2010-02-15 7 views
7

He buscado en Google durante la última hora sin suerte (¡me gustaría pensar que también soy un gran buscador de Google!), Así que aquí estoy.Lea XML en VB.net

que tienen un archivo XML que estoy usando para mi configuración de los programas, que se ve así:

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

¿Cómo puedo usar vb.net para obtener cada elemento y devolver un valor específico que quiero ? Per se, me gustaría devolver <number> (en <store>) en textbox1 y <emailbody> (en <emailsettings>) en textbox2.

Ayuda pleaseeeeee! Gracias :)

Respuesta

18

Ah, un ejemplo perfecto para demostrar de las potentes funciones de XML de VB.NET con 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 

rendimientos:

Number: 0323 
Body: package received 
+1

Esta es una gran respuesta, MUCHO mejor que mi respuesta de serialización. Su respuesta es lo que estaba buscando en mi pregunta: http://stackoverflow.com/questions/2253900/generics-and-duck-typing-xml-in-net Por favor, agregue esta respuesta a mi pregunta y la aceptaré. – Achilles

+0

Espléndido, pero ¿qué sucede si tiene un número múltiple de otra tienda como archivo podría ser un archivo de configuraciones para varias tiendas? –

+0

@AhmedNazmy: 'Para cada tienda en xml. . '. Luego, dentro del ciclo, acceda a 'almacenar. .Value'. – Heinzi

1

Puede usar serialización XML. Cree clases que representen su estructura XML y use la clase de serialización XML para deserializar los datos. Una vez que haya hecho eso, puede usar los datos en su aplicación.

A continuación se muestra un enlace a un ejemplo de MSDN:

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

+0

+1. Utilizo esto todo el tiempo cuando tengo que leer/escribir XML que tengo bajo control. – OregonGhost

5

Aquí es una aplicación de consola utilizando el soporte 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 

Los resultados serán:

Number=0323 
emailbody=package received 

Number=0323 
emailbody=package received 
+0

+1, ya que no entiendo el downvote ... – Heinzi

+0

Gracias por el +1. :-) – Rick

+0

+1 para aprovechar las extraordinarias funciones de idioma – Jay

0

Si está familiarizado con los conjuntos de datos y tablas de datos, esta es una manera fácil de hacerlo:

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

conjuntos de datos se pueden leer cualquier XML. Incluso uso esto para llamar a servicios XML habilitados para el resto.