Jump to content
emanuelx

xml com dois campos

Recommended Posts

emanuelx

Boas pessoal!

eu tenho um ficheiro xml chamado canais.xml

E dentro do ficheiro tenho.

<canalnome>rtp1</canalnome> e consigo que o campo <canalnome> seja escrito na listbox.

mas eu queria que no campo <canalnome>rtp1</canalnome> estivesse ralacionado o link, mas na listbox só era mostrado o nome do canal.

Para que quando carregasse-mos num item ele ia abrir o link do canal.

obrigado .

cumps


com calma e sem stresses

Share this post


Link to post
Share on other sites
ribeiro55

Estás a alimentar a listbox com algum tipo de databinding?

Caso estejas a carregar à unha, poderias adicionar um objecto teu aos items da listbox, com os dados que precisas e override ao toString para devolver o que queres mostrar na listbox.

Assim, poderias obter o link da seguinte forma: (imaginando que criaste um objecto chamado ItemCanal, com uma propriedade Link)

Ctype(ListBox1.SelectedItem,ItemCanal).Link

Caso estejas a carregar via algum databind, poderás tirar partido do Display e Value, associados a uma fonte de dados.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
emanuelx

olha obrigado pela ajuda vou ver se consigo fazer isso, é que eu ainda nao mexo grande coisa  no vb.net.

faço cenas mais simples, também para aprender melhor o funcionamento.


com calma e sem stresses

Share this post


Link to post
Share on other sites
emanuelx

se calhar não ficaste a perceber bem o que eu quero.

eu quero que o xml funcione como fosse um ficheiro .ini

que por exemplo na valor <canal>rtp1</canal> era também atribuido o valor </linkrtp1>www.rtp1.pt</linkrtp1>

e era escrito na listbox, quando os items fossem adicionados na listbox, era atribuido o valor linkrtp1 ao item que aparece na listbox como rtp1.

pronto não sei se percebeste agora.


com calma e sem stresses

Share this post


Link to post
Share on other sites
ribeiro55

Percebi à primeira, e volto a reforçar a ideia do meu post anterior.

Aproveito também e faço de novo a pergunta, antes de partir para qualquer solução, que era o que devia ter feito de início:

Estás a alimentar a listbox com algum tipo de databinding? Melhor, como estás a alimentar a listbox?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
emanuelx

a listbox está a ser preenchida por um xml.

este é o xml, que eu vou actualizando a medida que vou inserindo mais canais.

<?xml version="1.0" encoding="utf-8" ?>
<stream>
    <canalnome>
        <ch>RTP 1</ch>
        <ch>RTp 2</ch>
        <ch>Sic</ch>
        <ch>TVI</ch>
    </canalnome>
</stream>

 Private Sub canais()
        '  Dim canais As New XmlDocument
        Try
            Dim nomecanais As New XmlDocument

            nomecanais.Load(Application.StartupPath & "\canais\canaisn.xml")
            Dim node As XmlNode = nomecanais.SelectSingleNode("//canalnome")
            If node IsNot Nothing Then
                For x As Integer = 0 To node.ChildNodes.Count
                    Me.ListBox1.Items.Add(node.ChildNodes.Item(x).InnerText.ToString)
                Next
            End If
        Catch ex As Exception
        End Try
End Sub

mas tipo agora o que eu queria fazer era que ao carregar no item 1 ia abrir a rtp1.

mas isso também tinha de estar no xml.

cumps


com calma e sem stresses

Share this post


Link to post
Share on other sites
ribeiro55

Estás a alimentar à unha, óptimo.

Deixo-te uma sugestão para estudares.

Podes aplicar para ver se substituíres o código todo de uma form e acrescentares uma listbox de nome ListBox1:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AlimentaListbox("c:\canais.xml", ListBox1)
    End Sub

    Private Structure Canal
        Public Nome As String
        Public Link As String

        Public Overrides Function ToString() As String
            Return Nome
        End Function
    End Structure

    Private Sub AlimentaListbox(ByVal FicheiroXML As String, ByRef ListboxAlvo As ListBox)
        Dim XDOC As New Xml.XmlDocument
        XDOC.Load(FicheiroXML)

        ListboxAlvo.Items.Clear()

        For Each XMLE As Xml.XmlElement In XDOC.SelectNodes("canais/canal")
            Dim C As New Canal
            C.Nome = XMLE.Attributes("nome").Value
            C.Link = XMLE.Attributes("link").Value
            ListboxAlvo.Items.Add(C)
        Next

    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        If Not ListBox1.SelectedItem Is Nothing Then
            Dim C As Canal = CType(ListBox1.SelectedItem, Canal)
            MsgBox("Nome do canal: " & C.Nome & vbLf & "Link para o canal: " & C.Link)
        End If
    End Sub

End Class

Sendo o XML algo como:

<?xml version="1.0"?>
<canais>
<canal nome="RTP1" link="http://www.rtp.pt"/>
<canal nome="RTP2" link="http://www.rtp.pt"/>
<canal nome="SIC" link="http://www.sic.pt"/>
<canal nome="TVI" link="http://www.tvi.pt"/>
<canal nome="SIC N" link="http://www.sic.pt"/>
</canais>


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.