Usuário com melhor resposta
Extrair dados XML para um combobox

Pergunta
-
Olá,
Gente, preciso extrair os valores de um arquivo xml:
<?xml version="1.0" encoding="utf-16"?> <ListView> <Columns> <Column text="Descrição:" width="220" textAlign="Left" /> <Column text="Host/FTP:" width="234" textAlign="Left" /> <Column text="Usuário/Login:" width="130" textAlign="Left" /> <Column text="Senha:" width="0" textAlign="Left" /> </Columns> <Items> <item text="My Count"> <subItem text="ftp.mysite.com/" /> <subItem text="contato@mysite.com" /> <subItem text="12345" /> <subItem text="" /> </item> <item text="My Count 2"> <subItem text="ftp.mysite2.com/" /> <subItem text="contato@mysite2.com" /> <subItem text="12345" /> <subItem text="" /> </item> </Items> </ListView>
Preciso extrair o nome dos itens, no caso "My Count" e "My Count 2" para um combobox e ao selecionar o item no combobox que em textbox separados fosses extraidos os subitens correspondentes.
Ex.: Seleciono My Count 2 e no
Textbox1 = ftp.mysite2.com/
Textbox2 = contato@mysite2.com
E assim por diante.
Alguém pode me ajudar? Desde já agradeço.
Respostas
-
Primeiro crie uma classe Modelo:
Public Class Items Private _key As String Public Property Key() As String Get Return _key End Get Set(ByVal value As String) _key = value End Set End Property Private _items As IList(Of String) Public Property Items() As IList(Of String) Get Return _items End Get Set(ByVal value As IList(Of String)) _items = value End Set End Property Public Sub New() End Sub Public Sub New(ByVal key As String, ByVal items As IList(Of String)) _key = key _items = items End Sub End Class
Depois disso no seu Form principal crie uma variavel assim:
Dim ListItems As New List(Of Items)
Agora para ler os itens desse XML pode-se usar o XDocument do Linq:
Sub LerXml() Dim xmlText As String = File.ReadAllText(".\Base.xml") Dim results = (From c In XDocument.Parse(xmlText).Descendants("Items").Elements() Select New With { .Name = c.Attribute("text").Value, .Items = c.Elements("subItem").Attributes("text").Select(Function(a) a.Value).ToList() }).ToArray() For Each result In results ListItems.Add(New Items(result.Name, result.Items)) Next End Sub
Agora coloque esse método na inicialização do seu Form:
Public Class Form1 Dim ListItems As New List(Of Items) Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load LerXml()
Pronto agora você tem um dado tipado que é bem simples utilizar para carregar combos e valores:
'Carregar o Combo ComboBox1.Items.AddRange(ListItems.Select(Function(a) a.Key).ToArray())
Ao Selecionar o Combo posicionando na primeira linha faça assim para carregar 4 variaveis (ou TextBox)
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged If (ComboBox1.Items.Count > 0) Then Dim strs As String() = ListItems.Where(Function(c) c.Key.Equals(ComboBox1.SelectedItem)).Select(Function(a) a.Items).FirstOrDefault().ToArray() If (IsNothing(strs) = False) Then TextBox1.Text = strs(0) TextBox2.Text = strs(1) TextBox3.Text = strs(2) TextBox4.Text = strs(3) End If End If End Sub
Fulvio C
- Marcado como Resposta Eliseu5 segunda-feira, 16 de maio de 2016 17:58
Todas as Respostas
-
No meu canal tenho um vídeo explicando como desserializar um XML em objetos
Assim que desserializado, basta passar a array de objetos gerada como DataSource para a ComboBox
-
Primeiro crie uma classe Modelo:
Public Class Items Private _key As String Public Property Key() As String Get Return _key End Get Set(ByVal value As String) _key = value End Set End Property Private _items As IList(Of String) Public Property Items() As IList(Of String) Get Return _items End Get Set(ByVal value As IList(Of String)) _items = value End Set End Property Public Sub New() End Sub Public Sub New(ByVal key As String, ByVal items As IList(Of String)) _key = key _items = items End Sub End Class
Depois disso no seu Form principal crie uma variavel assim:
Dim ListItems As New List(Of Items)
Agora para ler os itens desse XML pode-se usar o XDocument do Linq:
Sub LerXml() Dim xmlText As String = File.ReadAllText(".\Base.xml") Dim results = (From c In XDocument.Parse(xmlText).Descendants("Items").Elements() Select New With { .Name = c.Attribute("text").Value, .Items = c.Elements("subItem").Attributes("text").Select(Function(a) a.Value).ToList() }).ToArray() For Each result In results ListItems.Add(New Items(result.Name, result.Items)) Next End Sub
Agora coloque esse método na inicialização do seu Form:
Public Class Form1 Dim ListItems As New List(Of Items) Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load LerXml()
Pronto agora você tem um dado tipado que é bem simples utilizar para carregar combos e valores:
'Carregar o Combo ComboBox1.Items.AddRange(ListItems.Select(Function(a) a.Key).ToArray())
Ao Selecionar o Combo posicionando na primeira linha faça assim para carregar 4 variaveis (ou TextBox)
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged If (ComboBox1.Items.Count > 0) Then Dim strs As String() = ListItems.Where(Function(c) c.Key.Equals(ComboBox1.SelectedItem)).Select(Function(a) a.Items).FirstOrDefault().ToArray() If (IsNothing(strs) = False) Then TextBox1.Text = strs(0) TextBox2.Text = strs(1) TextBox3.Text = strs(2) TextBox4.Text = strs(3) End If End If End Sub
Fulvio C
- Marcado como Resposta Eliseu5 segunda-feira, 16 de maio de 2016 17:58
-
-
-