none
Capturar texto entre <item> e </item> no arquivo de texto RRS feed

  • Pergunta

  • Olá. Eu tenho um arquivo de texto com itens que estão entre <item> e </item>. Eu preciso capturar cada um dos itens. Como posso fazer isso? Obrigado.

    <item>Item 1</item>
    <item>Item 2</item>
    <item>Item 3</item>
    <item>Item 4</item>
    <item>Item 5</item>
    <item>Item 6</item>
    <item>Item 7</item>



    • Editado Free4k quinta-feira, 5 de fevereiro de 2015 12:40
    quinta-feira, 5 de fevereiro de 2015 11:40

Respostas

  • Olhei os links, realmente é mais fácil, porém complica pelo fato que este arquivo XML está hospedado em um website. Não sei como posso fazer para carregar um arquivo XML no programa diretamente da url de um website. Como posso proceder? Obrigado.

    Tente fazer assim:

    XmlDocument doc1 = new XmlDocument();
    doc1.Load("http://www.site.com/Arquivo.xml");


    Herbert Lausmann

    • Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 6 de fevereiro de 2015 17:36
    • Marcado como Resposta Free4k quarta-feira, 11 de fevereiro de 2015 16:47
    sexta-feira, 6 de fevereiro de 2015 17:11
  • O problema é que este conteúdo vem em HTML, e não em XML.

    Criei um exemplo levando em consideração o Link que você passou. Adicione uma nova Class ao seu projeto e cole o código abaixo:

    Imports System.Xml
    Public Class Feed
        Private _FeedItems As New System.Collections.ObjectModel.Collection(Of FeedItem)
        Public Sub New(Source As XmlDocument)
            For Each ele As XmlElement In Source.GetElementsByTagName("item")
                _FeedItems.Add(New FeedItem(ele))
            Next
        End Sub
        Public ReadOnly Property FeedItems As System.Collections.Generic.ICollection(Of FeedItem)
            Get
                Return _FeedItems
            End Get
        End Property
    End Class
    Public Class FeedItem
        Private _Source As XmlElement
        Public Sub New(ByRef Source As XmlElement)
            _Source = Source
        End Sub
        Public ReadOnly Property Title As String
            Get
                Return _Source.FirstChild.InnerText
            End Get
        End Property
        Public ReadOnly Property Link As String
            Get
                Return _Source.GetElementsByTagName("link")(0).InnerText
            End Get
        End Property
        Public ReadOnly Property Category As String
            Get
                Return _Source.GetElementsByTagName("category")(0).FirstChild.InnerText
            End Get
        End Property
        Public ReadOnly Property Description As String
            Get
                Return _Source.GetElementsByTagName("description")(0).FirstChild.InnerText
            End Get
        End Property
        Public ReadOnly Property Content As String
            Get
                Return _Source.GetElementsByTagName("content:encoded")(0).FirstChild.InnerText
            End Get
        End Property
    End Class
    

    Então use o código assim:

            Dim doc As New System.Xml.XmlDocument()
            doc.Load("http://www.baixarfilmesgratis.net/feed/")
            Dim feed As New Feed(doc)

    O objeto feed, do exemplo acima, irá conter todos os items extraídos do arquivo XML.


    Herbert Lausmann

    • Sugerido como Resposta Mr. GMSOFT quarta-feira, 11 de fevereiro de 2015 16:05
    • Marcado como Resposta Free4k quarta-feira, 11 de fevereiro de 2015 16:44
    quarta-feira, 11 de fevereiro de 2015 15:28
  • Obrigado amigo, deu certinho!

    Para exibir os últimos posts fiz da seguinte forma:

    Dim doc As New System.Xml.XmlDocument()
    doc.Load("http://www.baixarfilmesgratis.net/feed/")
    Dim feed As New Feed(doc)
    Dim post As String
    For a = 0 To 9
    post += feed.FeedItems(a).Content
    Next

    Agradeço a todos pela ajuda ;)

    • Marcado como Resposta Free4k quarta-feira, 11 de fevereiro de 2015 16:46
    quarta-feira, 11 de fevereiro de 2015 16:46

Todas as Respostas

  • Olá,

    Isso é um arquivo .xml?


    Herbert Lausmann

    quinta-feira, 5 de fevereiro de 2015 13:39
  • Correto, mas vou abrir como um arquivo de texto, pois só preciso das informações entre as tags.
    quinta-feira, 5 de fevereiro de 2015 14:19
  • Correto, mas vou abrir como um arquivo de texto, pois só preciso das informações entre as tags.

    É mais fácil usar a API XML do .Net Framwork.

    VB .NET - Realizando operações com LINQ To XML

    Usando LINQ To XML

    VB .NET - Lendo Arquivos XML

    Localizando informações em arquivos XML


    Herbert Lausmann

    quinta-feira, 5 de fevereiro de 2015 14:27
  • Olhei os links, realmente é mais fácil, porém complica pelo fato que este arquivo XML está hospedado em um website. Não sei como posso fazer para carregar um arquivo XML no programa diretamente da url de um website. Como posso proceder? Obrigado.
    sexta-feira, 6 de fevereiro de 2015 17:04
  • Olhei os links, realmente é mais fácil, porém complica pelo fato que este arquivo XML está hospedado em um website. Não sei como posso fazer para carregar um arquivo XML no programa diretamente da url de um website. Como posso proceder? Obrigado.

    Tente fazer assim:

    XmlDocument doc1 = new XmlDocument();
    doc1.Load("http://www.site.com/Arquivo.xml");


    Herbert Lausmann

    • Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 6 de fevereiro de 2015 17:36
    • Marcado como Resposta Free4k quarta-feira, 11 de fevereiro de 2015 16:47
    sexta-feira, 6 de fevereiro de 2015 17:11
  • Olá. Eu acho que deu certo, porém apareceu um erro.

    Por exemplo, se eu quero pegar o titulo e o link do site que está no XML (print aqui), eu fiz da seguinte forma e ocorreu o erro:

    Obrigado!

    sexta-feira, 6 de fevereiro de 2015 17:33
  • É, eu acho que XPATH não é necessário.

    Tente usar o Método XmlDocument.GetElementsByTagName (String) (System.Xml) ao invés de SelectSingleNode...


    Herbert Lausmann

    sexta-feira, 6 de fevereiro de 2015 18:15
  • A maneira mais rapida e eficiente de se fazer isso é com Expressões regulares veja abaixo:

    'Expressao baseada em tags
    Dim rg As New Regex("(</?[a-zA-Z].{4})")
    
    'string contendo com o conteudo a ser removido
    Dim teste As String = "<item>item 1</item>"
    
    'Remove as tags deixando somente o contedudo interno
    Dim retorno As String = rg.Replace(teste, "")
    
    'Exibi o resultado
    MessageBox.Show(retorno)

    sexta-feira, 6 de fevereiro de 2015 18:16
  • Boa tarde Free4k,

    Marquei as respostas do Herbert e do GMSOFT pois parecem ter resolvido o seu problema. Caso não tenha resolvido ainda, desmarque como resposta que continuaremos ajudando ok?

    Obrigado,

    Abraço!


    segunda-feira, 9 de fevereiro de 2015 19:06
    Moderador
  • Então, nenhum dos códigos funcionou. O último código não deu erro, porém não funcionou.
    segunda-feira, 9 de fevereiro de 2015 21:57
  • Então seu arquivo provavelmente não é o que postou, posta o arquivo que esta usando, se você copiar e colar o código que postei roda, se quiser te mando o executável
    segunda-feira, 9 de fevereiro de 2015 22:22
  • Olá, estava testando no Visual Studio 2015 Preview, quando joguei no Visual Studio 2013 funcionou, porém, mostrou todo o código. Veja como fiz:

     Dim rg As New Regex("(</?[a-zA-Z].{4})")
     Dim teste As String = WebBrowser1.DocumentText.ToString
     Dim retorno As String = rg.Replace(teste, "")
     MessageBox.Show(retorno)

    terça-feira, 10 de fevereiro de 2015 16:24
  • Veja só o código que te passei é baseado no exemplo que postou somente com a tag <item></item> se for diferente disso não ira funcionar.

    Mais vi que esta usando WebBrowser ai o negocio se tornou muito mais fácil, veja meu código abaixo:

    Dim browser As New WebBrowser()
    browser.Navigate("sua_url")
    
    For Each elemento As HtmlElement In browser.Document.GetElementsByTagName("nome_da_tag")
    	MessageBox.Show(elemento.InnerText)
    Next
    onde tem nome_da_tag coloque o nome da tag que deseja pegar o conteúdo
    terça-feira, 10 de fevereiro de 2015 16:48
  • Olá amigo, com "item" nada aconteceu. Troquei "item" por "title" (que só tem uma tag com este nome) exibiu o MsgBox vazio. Obrigado.

    For Each elemento As HtmlElement In WebBrowser1.Document.GetElementsByTagName("item")
       MessageBox.Show(elemento.InnerText)
    Next


    terça-feira, 10 de fevereiro de 2015 18:51
  • Você te, que saber o nome da tag html correto, ja que esta pegando de um site, tente trocar Innertext por innerHTML
    terça-feira, 10 de fevereiro de 2015 20:05
  • Eu preciso pegar os textos entre a tag (ex: <tag>texto 1</tag><tag>texto 2</tag><tag>texto 3</tag>). Tentei o que você disse, colocar innerHTML, aconteceu o mesmo.
    quarta-feira, 11 de fevereiro de 2015 12:01
  • Faz esse exemplo ai e testa alguma informação esta incorreta no que você quer pegar do site, provavelmente o nome da tag esta incorreto:
    Public Class Form1
        Dim browser As New WebBrowser()
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            browser.Navigate("http://www.uol.com.br/")
    
    
        End Sub
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            For Each elemento As HtmlElement In browser.Document.GetElementsByTagName("div")
                MessageBox.Show(elemento.InnerText)
            Next
        End Sub
    End Class

    quarta-feira, 11 de fevereiro de 2015 13:03
  • Funcionou mesmo, eu acho que não está funcionando por o arquivo ser XML.
    • Editado Free4k quarta-feira, 11 de fevereiro de 2015 13:34
    quarta-feira, 11 de fevereiro de 2015 13:31
  • Mais esse arquivo esta em uma pagina WEB? se puder me disponibilize o link que eu testo
    quarta-feira, 11 de fevereiro de 2015 13:48
  • Eu quero criar uma versão para desktop do site. Clique para abrir o website.
    quarta-feira, 11 de fevereiro de 2015 14:32
  • OK,nesse seu caso ai é melhor você baixar todo o texto e usar expressões regulares, mais você vai ter muito trabalho, ou você pode procurar por HtmlAgilityPack
    quarta-feira, 11 de fevereiro de 2015 14:41
  • O problema é que este conteúdo vem em HTML, e não em XML.
    quarta-feira, 11 de fevereiro de 2015 14:43
  • OK,nesse seu caso ai é melhor você baixar todo o texto e usar expressões regulares, mais você vai ter muito trabalho, ou você pode procurar por HtmlAgilityPack

    Mr. GMSOFT,

    Ele precisa processar um arquivo XML, então, não é melhor usar a API do próprio .Net Framework?

    System.Xml;

    System.Xml.Linq;

    Não acho que seja necessário usar o HtmlAgilityPack que é voltado mais a Html.


    Herbert Lausmann

    quarta-feira, 11 de fevereiro de 2015 14:46
  • Concordo Herbert Lausmann mais eu ja usei o HtmlAgilityPack para ler xml sem problemas mais pode ser que para ele pareça mais complicado, no ultimo post dele vi o link que contem o xml aberto no browser,para a questão dele seria salvar esses dados com XML mesmo
    • Editado Mr. GMSOFT quarta-feira, 11 de fevereiro de 2015 14:58
    quarta-feira, 11 de fevereiro de 2015 14:57
  • O problema é que este conteúdo vem em HTML, e não em XML.

    Criei um exemplo levando em consideração o Link que você passou. Adicione uma nova Class ao seu projeto e cole o código abaixo:

    Imports System.Xml
    Public Class Feed
        Private _FeedItems As New System.Collections.ObjectModel.Collection(Of FeedItem)
        Public Sub New(Source As XmlDocument)
            For Each ele As XmlElement In Source.GetElementsByTagName("item")
                _FeedItems.Add(New FeedItem(ele))
            Next
        End Sub
        Public ReadOnly Property FeedItems As System.Collections.Generic.ICollection(Of FeedItem)
            Get
                Return _FeedItems
            End Get
        End Property
    End Class
    Public Class FeedItem
        Private _Source As XmlElement
        Public Sub New(ByRef Source As XmlElement)
            _Source = Source
        End Sub
        Public ReadOnly Property Title As String
            Get
                Return _Source.FirstChild.InnerText
            End Get
        End Property
        Public ReadOnly Property Link As String
            Get
                Return _Source.GetElementsByTagName("link")(0).InnerText
            End Get
        End Property
        Public ReadOnly Property Category As String
            Get
                Return _Source.GetElementsByTagName("category")(0).FirstChild.InnerText
            End Get
        End Property
        Public ReadOnly Property Description As String
            Get
                Return _Source.GetElementsByTagName("description")(0).FirstChild.InnerText
            End Get
        End Property
        Public ReadOnly Property Content As String
            Get
                Return _Source.GetElementsByTagName("content:encoded")(0).FirstChild.InnerText
            End Get
        End Property
    End Class
    

    Então use o código assim:

            Dim doc As New System.Xml.XmlDocument()
            doc.Load("http://www.baixarfilmesgratis.net/feed/")
            Dim feed As New Feed(doc)

    O objeto feed, do exemplo acima, irá conter todos os items extraídos do arquivo XML.


    Herbert Lausmann

    • Sugerido como Resposta Mr. GMSOFT quarta-feira, 11 de fevereiro de 2015 16:05
    • Marcado como Resposta Free4k quarta-feira, 11 de fevereiro de 2015 16:44
    quarta-feira, 11 de fevereiro de 2015 15:28
  • Como faço para exibir amigo?
    quarta-feira, 11 de fevereiro de 2015 15:42
  • O objeto Feed retorna uma coleção com FeedItems. E cada FeedItem tem suas propriedades:

    Label1.Text = feed.FeedItems(0).Link
    Assim retorna o Link do primeiro item do feed.


    Herbert Lausmann

    quarta-feira, 11 de fevereiro de 2015 15:46
  • Hmm, obrigado amigo. E como faço para listar os itens de 0 até 9 por exemplo? Tentei assim, porém não deu certo.

    Dim doc As New System.Xml.XmlDocument()
    doc.Load("http://www.baixarfilmesgratis.net/feed/")
    Dim feed As New Feed(doc)
    For a = 0 To 9
        WebBrowser1.DocumentText &= feed.FeedItems(a).Content
    Next

    Obrigado.


            Dim doc As New System.Xml.XmlDocument()
            doc.Load("http://www.baixarfilmesgratis.net/feed/")
            Dim feed As New Feed(doc)
            Dim htmlDoc As New System.Text.StringBuilder()
            htmlDoc.AppendLine("<html>")
            htmlDoc.AppendLine("<head>")
            htmlDoc.AppendLine("</head>")
            htmlDoc.AppendLine("<body>")
            For Each fi As FeedItem In feed.FeedItems
                htmlDoc.AppendLine(fi.Content)
            Next
            htmlDoc.AppendLine("</body>")
            htmlDoc.Append("</html>")
            webBrowser1.DocumentText = htmlDoc.ToString()

    Tente da forma acima...

    Herbert Lausmann

    quarta-feira, 11 de fevereiro de 2015 16:41
  • Obrigado amigo, deu certinho!

    Para exibir os últimos posts fiz da seguinte forma:

    Dim doc As New System.Xml.XmlDocument()
    doc.Load("http://www.baixarfilmesgratis.net/feed/")
    Dim feed As New Feed(doc)
    Dim post As String
    For a = 0 To 9
    post += feed.FeedItems(a).Content
    Next

    Agradeço a todos pela ajuda ;)

    • Marcado como Resposta Free4k quarta-feira, 11 de fevereiro de 2015 16:46
    quarta-feira, 11 de fevereiro de 2015 16:46