Usuário com melhor resposta
Capturar texto entre <item> e </item> no arquivo de texto

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
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
-
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
-
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
Todas as Respostas
-
-
-
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
Localizando informações em arquivos XML
Herbert Lausmann
- Sugerido como Resposta Eduardo.RomeroModerator sexta-feira, 6 de fevereiro de 2015 16:51
- Não Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 6 de fevereiro de 2015 17:36
-
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.
-
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
-
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!
-
É, 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
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 9 de fevereiro de 2015 11:06
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 9 de fevereiro de 2015 19:04
- Não Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 20 de fevereiro de 2015 12:00
- Não Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 20 de fevereiro de 2015 12:00
-
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)
- Sugerido como Resposta Mr. GMSOFT sexta-feira, 6 de fevereiro de 2015 18:16
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 9 de fevereiro de 2015 19:04
- Não Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 20 de fevereiro de 2015 12:00
- Não Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 20 de fevereiro de 2015 12:00
-
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!
- Editado Eduardo.RomeroModerator segunda-feira, 9 de fevereiro de 2015 19:07
-
-
-
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)
-
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 -
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
-
-
-
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
-
-
-
Eu quero criar uma versão para desktop do site. Clique para abrir o website.
-
-
-
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
-
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
-
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
-
-
-
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
-
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