Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Senhores, boa tarde... Tudo bem?
Senhores,eu jah tentei de tudo para ler esse XML mas não consigo... Alguém poderia colocar um script como exemplo..
Pelo menos que lesse qualquer outro XML com nós, subnós, subsubnós, etc...
Esse é um dos XML's que estou tentando exibir como uma vitrine de produtos...
http://parceiroxml.buscape.com.br/produto.do?id=5&np=4
O que eu precisaria daí:
No aguardo!
Xanburzum, beleza kara?
Rapaz, soh uma coisa!
De XML eu não entendo mt bem algumas coisas!
Eu já tentei fazer, lendo o nome dos nós, mas não deu certo...
Você poderia fazer um exemplo de como rodar aquele lá que passei o link?
http://parceiroxml.buscape.com.br/produto.do?id=5&np=4
Ficarei agradecido!
Isso ai é mole de se fazer, basta utilizar DOM com selectsinglenode para buscar os dados referentes as tags, neste caso a marcação é algo como //nometag, em relação aos parâmetros de apenas uma marcação se utiliza selectsingnode .text, para parâmetros com marcação extra dentro da tag, se utiliza attributes getnameditem especificação de nome e .text, e para referencias múltiplas com valores de tags semelhantes com valores diferentes se faz uma marcação do tipo //nometag[@tagextra=valor]
Kara, num entendi nada! kkkkkk
Poderia enviar um exemplo? Obrigado!
XML ainda estou tentando aprender!
Fiz um exemplo simples aqui para você ter uma idéia, o segredo esta na marcação da tag, por exemplo...
Na url do buscape que você passou tem a seguinte tag com as seguintes marcações
<prd id="197069" nemp="10">
Vamos supor que você queira recuperar o valor nemp desta tag, neste caso você teria que utilizar selectsinglenode com atributes getnameditem neste caso para identificar qual marcação dentro da tag você quer tirar o valor, neste exemplo como vamos tirar o valor da marcação nemp eu faço assim:
selectsinglenode("//prd").attributes.getnameditem("nemp").text
repare que no selectsinglenode eu dei o valor da tag prd da seguinte forma //prd ou seja todas as chamativas terão que conter o // e no caso eu queria buscar o valor nemp com isso utilizei attributes.getnameditem("nemp").text que dai me retorna o valor quando puxo por uma variável.
Agora vamos supor que você queira buscar o valor de uma tag sem marcação, ou seja, apenas a tag com o valor, neste caso a tag lá esta da seguinte maneira...
<dl>Sony DVP SR200P</dl>
para pegar o valor desta tag <dl> que no caso é única você faz assim...
selectsinglenode("//dl").text
neste caso repare que eu não utilizei atributes getnameitem pois não tem marcação extra
Agora vamos ao exemplo de tags com marcações iguais no qual se define a diferença pelo valor, neste caso são estas tags...
<prc tprc="min" vlr="141.00"/>
<prc tprc="max" vlr="179.00"/>
Repare que o que diferencia é o valor da marcação tprc... uma é min e outra é max, neste caso você tem que utilizar dentro do selectsinglenode uma marcação no qual define que quer pegar o valor da tag que contém o valor min na marcação tprc que esta dentro da tag prc, neste caso você teria que fazer assim para puxar o valor
selectsinglenode("//prc[@tprc=""min""]").attributes.getnameditem("vlr").text
se quisesse pegar o valor max mudaria apenas o valor dentro da marcação tprc que esta de min para max, ficando assim
selectsinglenode("//prc[@tprc=""max""]").attributes.getnameditem("vlr").text
Ou seja, você terá que definir tag por tag... marcação por marcação... identificando uma a uma e mostrando ao sistema qual dados colher, isso tudo é uma questão de lógica.
Para ter uma melhor idéia fiz um script para te servir como modelo, com ele você entendera melhor o que disse acima, fiz ele agora na pressa aqui por isso é o básico pois para códigos que exigem valores vindos de outros sites é necessário fazer um tratamentos de erro, em alguns casos utilizar for para mais de um valor, mais esta parte é a mais fácil pois são os princípios básicos do que é feito no asp no dia a dia, no caso do DOM ele possibilita infinitas possibilidades, basta estudar e botar a mão na massa, estou te dando o pão a faca...tu terá que passar a manteiga, boa sorte.
Segue abaixa a function que eu fiz para servir como base pra tu
<%
Function buscape(id,np)
set buscape = createObject("MSXML2.DOMDocument")
buscape.async = False
buscape.setProperty "ServerHTTPRequest", true
buscape.load("http://parceiroxml.buscape.com.br/produto.do?id="& id &"&np="& np &"")
produto = buscape.selectsinglenode("//dl").text
imagem = buscape.selectsinglenode("//src").attributes.getnameditem("url").text
valormin = buscape.selectsinglenode("//prc[@tprc=""min""]").attributes.getnameditem("vlr").text
valormax = buscape.selectsinglenode("//prc[@tprc=""max""]").attributes.getnameditem("vlr").text
response.write("Nome do produto: "& produto &"<br />Imagem: "& imagem &"<br />Valor Mínimo: "& valormin &"<br />Valor Máximo:"& valormax)
set buscape = nothing
End Function
Call buscape("5","4")
%>
Kara, o tutorial tah muito bom.. Peguei 100% dele!
Só mais uma pergunta:
Como eu faço ele exibir todos os produtos do xml...
Tipo For Next, sei lá....
Obrigado!
um outro tutorial link
Kara, eu num entendi como setar pra fazer o código exibir todos os dados do xml...
veja como eu fiz!
<%
Function buscape(id,np)
set buscape = createObject("MSXML2.DOMDocument")
buscape.async = False
buscape.setProperty "ServerHTTPRequest", true
buscape.load("http://parceiroxml.buscape.com.br/produto.do?id="& id &"&np="& np &"")
Set objLst = buscape.getElementsByTagName("prd")
For i = 0 To objLst.Length - 1
produto = buscape.selectsinglenode("//dl").text
imagem = buscape.selectsinglenode("//src").attributes.getnameditem("url").text
valormin = buscape.selectsinglenode("//prc[@tprc=""min""]").attributes.getnameditem("vlr").text
valormax = buscape.selectsinglenode("//prc[@tprc=""max""]").attributes.getnameditem("vlr").text
response.write("Nome do produto: "& produto &"<br />Imagem: "& imagem &"<br />Valor Mínimo: "& valormin &"<br />Valor Máximo:"& valormax & "<br><br>")
Next
set objLst = nothing
set buscape = nothing
End Function
Call buscape("5","4")
%>
Não dá certo, porque...
1. Ele conta a quantidade de nós / produtos corretamente ( No caso, 4 itens )
2. Só que ele apenas exibe o primeiro item 4 vezes...
Como fazer pra ele exibir todos os itens?
olha o exemplo do post #2
<%
Function buscape(id,np)
set buscape = createObject("MSXML2.DOMDocument")
buscape.async = False
buscape.setProperty "ServerHTTPRequest", true
buscape.load("http://parceiroxml.buscape.com.br/produto.do?id="& id &"&np="& np &"")
' Mudei isso aqui...
Set raiz = buscape.documentElement
For i = 0 to raiz.childNodes.length -1
'... até aqui. Mas soh exibe 1 produto - normal, sem repetições.
produto = raiz.selectsinglenode("//dl").text
imagem = raiz.selectsinglenode("//src").attributes.getnameditem("url").text
valormin = raiz.selectsinglenode("//prc[@tprc="min"]").attributes.getnameditem("vlr").text
valormax = raiz.selectsinglenode("//prc[@tprc="max"]").attributes.getnameditem("vlr").text
response.write("Nome do produto: "& produto &"<br />Imagem: "& imagem &"<br />Valor Mínimo: "& valormin &"<br />Valor Máximo:"& valormax & "<br><br>")
Next
set objLst = nothing
set buscape = nothing
End Function
Call buscape("5","4")
%>
Não deu ainda!
Ta ai
<%
Function buscape(id,np)
set buscape = createObject("MSXML2.DOMDocument")
buscape.async = False
buscape.setProperty "ServerHTTPRequest", true
buscape.load("http://parceiroxml.buscape.com.br/produto.do?id="& id &"&np="& np &"")
set quantidade = buscape.selectNodes("//dl")
For i = 0 to quantidade.length - 1
produto = quantidade(i).selectsinglenode("//dl").text
imagem = quantidade(i).selectsinglenode("//src").attributes.getnameditem("url").text
valormin = quantidade(i).selectsinglenode("//prc[@tprc=""min""]").attributes.getnameditem("vlr").text
valormax = quantidade(i).selectsinglenode("//prc[@tprc=""max""]").attributes.getnameditem("vlr").text
response.write("Nome do produto: "& produto &"<br />Imagem: "& imagem &"<br />Valor Mínimo: "& valormin &"<br />Valor Máximo:"& valormax)
next
set quantidade = nothing
set buscape = nothing
End Function
Call buscape("5","4")
%>
Kara, boa noite... beleza?
Tu conseguiu rodar esse script pra ele mostrar todos os itens?
1. Sony DVP SR200P
2. Philips DVP3350KMX
3. Tectoy DVT-F651
4. LG DV 497H
Mas eu soh consigo ler o primeiro 4 vezes.
COLOQUEI ASSIM TAMBÉM E NADA:
set quantidade = buscape.selectNodes("//prd")
Não rodei não, fiz a modificação com o code que te passei aqui mais não coloquei e testei aqui, vou testar aqui.
No caso o set quantidade = buscape.selectNodes("//dl") esta correto, pois utilizo ele para percorrer as tags do xml e extrategicamente escolhe-se uma tag que seja único mais que esteja presente em outros nestes caso em produtos, se fosse uma tag múltipla como prc ela iria mostrar 8 ao invés de 4.
Mais vou testar aqui e ver o que ta de errado.
Estranho... realmente esta repetindo, fiz uns testes e nada, depois se baseando na formatação do code que o Xam postou fiz da mesma maneira
<%
Function buscape(id,np)
set buscape = createObject("MSXML2.DOMDocument")
buscape.async = false
buscape.setProperty "ServerHTTPRequest", true
buscape.load("http://parceiroxml.buscape.com.br/produto.do?id="& id &"&np="& np &"")
set quantidade = buscape.selectnodes("//dl")
for i = 0 to quantidade.length - 1
produto = quantidade.item(i).selectsinglenode("//dl").text
imagem = quantidade.item(i).selectsinglenode("//src").attributes.getnameditem("url").text
valormin = quantidade.item(i).selectsinglenode("//prc[@tprc=""min""]").attributes.getnameditem("vlr").text
valormax = quantidade.item(i).selectsinglenode("//prc[@tprc=""max""]").attributes.getnameditem("vlr").text
response.write("Nome do produto: "& produto &"<br />Imagem: "& imagem &"<br />Valor Mínimo: "& valormin &"<br />Valor Máximo:"& valormax)
response.write("<br /><br />")
next
set quantidade = nothing
set buscape = nothing
End Function
Call buscape(5,4)
%>
mais novamente repete ao invés de não repetir os mesmo itens, estou achando que pode ser por conta da formatação do xml, que no neste caso é diferenciado,
Vou ficar te devendo essa.
verificou o XML, se a estrutura esta correta ?!?!?!
Boa noite, beleza?
Xanburzum, kara, a estrutura do XML está correta! Os mesmos nós "filhos" e o mesmo nó "pai".
O problema só estão mesmo na tag <prd></prd> que delimitam cada produto...
Flw!
O problema só estão mesmo na tag <prd></prd> que delimitam cada produto
o que ele gera agora..
Rapaz, ele soh repete o primeiro item 4 vezes... Num dá mais nada!
apenas para teste, crie um novo e teste, e poste o resultado
Olha este exemplo, Note que ele está pegando as informações para montar a página asp diretamente do arquivo XML.
t
<%
Option Explicit
Response.Buffer = True
Dim xml
Set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = False
xml.load (Server.MapPath("arquivo.xml"))
Dim titulo, cabecalho, paragrafo, Corpo
titulo = xml.documentElement.childNodes(0).text
cabecalho = xml.documentElement.childNodes(1).text
paragrafo = xml.documentElement.childNodes(2).text
corpo = xml.documentElement.childNodes(3).text
Set xml = Nothing
%>
<html>
<head>
<title><%= titulo%></title>
</head>
<body>
<h3 align="center"><%= cabecalho %></h3>
<p align="center"><% = paragrafo %></p>
<div align="center"><%= corpo %></div>
</body>
</html>Ta ai, o resto é contigo, neste caso não repete, o resto é contigo senão fica fácil vir aqui e alguém fazer inteiramente pra você, fiz puxando o nome do produto, a url da imagem e o valor o resto é contigo em caso de dúvidas estude XML DOM em asp, existe uma infinidade de tutoriais na net.
<%
Function buscape(id,np)
set buscape = createObject("MSXML2.DOMDocument")
buscape.async = false
buscape.setProperty "ServerHTTPRequest", true
buscape.load("http://parceiroxml.buscape.com.br/produto.do?id="& id &"&np="& np &"")
set produto = buscape.selectnodes("//prd")
for each selecionador in produto
produto = selecionador.text
set imagens = selecionador.selectNodes("img/src")
for each imagem in imagens
imagemproduto = imagem.getAttribute("url")
next
set imagens = nothing
set valormin = selecionador.selectNodes("prc")
for each valor in valormin
valorproduto = valor.getAttribute("vlr")
next
set valormin = nothing
response.write produto & "<br />"
response.write imagemproduto & "<br />"
response.write valorproduto & "<br /><br />"
next
set produto = nothing
set buscape = nothing
End Function
Call buscape(5,4)
%>
Kara, muito bom!
Vlw mesmo! Era soh isso que eu queria... Que ele lesse os nós/subnós e atributos... O resto eu consigo!
Lendo, o resto eu vou fazer um negócio muito bakana... e depois disponibilizo aki pra turma que precisar... beleza?
Vlw!
beleza http://forum.imasters.com.br/public/style_emoticons/default/joia.gif boa sorte
Atualizando...
Velho cometi um erro que na hora passou batido, agora fui testar esse sistema ai do buscapé e verifiquei este "erro".
No caso anterior que eu montei, a tag valor esta com a marcação errônea isto por que naquele caso só recupera o valor min, isso porque eu esqueci de fazer a especificação em qual valor de marcação o dado seria recuperado.
No caso para recuperar o valor min faríamos assim...
selectNodes("prc[@tprc=""min""]")
No caso para recuperar o valor max faríamos assim...
selectNodes("prc[@tprc=""max""]")
Ficando assim o code mais apropriado e correto
<%
Function buscape(id,np)
set buscape = createObject("MSXML2.DOMDocument")
buscape.async = false
buscape.setProperty "ServerHTTPRequest", true
buscape.load("http://parceiroxml.buscape.com.br/produto.do?id="& id &"&np="& np &"")
set produto = buscape.selectnodes("//prd")
for each selecionador in produto
produto = selecionador.text
set imagens = selecionador.selectNodes("img/src")
for each imagem in imagens
imagemproduto = imagem.getAttribute("url")
next
set imagens = nothing
set valormin = selecionador.selectNodes("prc[@tprc=""min""]")
for each valor in valormin
valorprodutomin = valor.getAttribute("vlr")
next
set valormin = nothing
set valormax = selecionador.selectNodes("prc[@tprc=""max""]")
for each valor in valormax
valorprodutomax = valor.getAttribute("vlr")
next
set valormax = nothing
response.write "Produto: " & produto & "<br />"
response.write "Imagem: " & imagemproduto & "<br />"
response.write "Valor Mín: " & valorprodutomin & "<br />"
response.write "Valor Max: " & valorprodutomax & "<br /><br />"
next
set produto = nothing
set buscape = nothing
End Function
Call buscape(5,4)
%>
Não se esqueça também de fazer o tratamento de erro, isso é muito importante para acabar não avacalhando a page caso ocorra algum erro no retorno ou mostragem dos dados.
* Este code xml ai do buscape é um dos codes mais mal formatados que eu já vi na minha vida, totalmente sem noção.
exemplo
Arquivo: internet.xml(exemplo)
Lendo o documento internet.xmlNo exemplo abaixo, iremos extrair só os elementos filhos que nos interessam.
<%
'Instancia o objeto XMLDOM.
Set objXMLDoc = CreateObject("MSXML2.DOMDocument.4.0")
'Indicamos que o download em segundo plano não é permitido
objXMLDoc.async = False
'Carrega o domcumento XML
objXMLDoc.load("e:\home\LoginFTP\Web\internet.xml")
'O método parseError contém informações sobre o último erro ocorrido
response.write "Url do arquivo com problemas: " & objXMLDoc.parseError.urlif objXMLDoc.parseError <> 0 then
else
'A propriedade documentElement refere-se à raiz do documento
Set raiz = objXMLDoc.documentElement
'Looping para percorrer todos os elementos filhos
For i = 0 to raiz.childNodes.length -1
'A propriedade NodeName contém o nome do elemento
'A propriedade childNodes contém a lista de
'elementos filhos
Response.write raiz.NodeName & "<br>" & raiz.childNodes.item(i).childNodes.item(0).text & "<br>" & raiz.childNodes.item(i).childNodes.item(1).text
Next
end if
'Destruindo os objetos
Set objXMLDoc = Nothing
Set raiz = Nothing
%>