Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos,
Tenho uma dúvida. Possuo um código de inserção dados em XML via ASP, porém gostaria adaptá-lo para que, somente atualize o único conjunto de registros existente, por exemplo:
<?xml version="1.0" encoding="iso-8859-1"?>
<chat>
<titulo>Tire suas dúvidas</titulo>
<data>13 de setembro</data>
<hora>18h30min</hora>
</chat>
E o asp, que insere:
<%
if request("acao") = "cadastrar" then
titulo=request.form("titulo")
data=request.form("data")
hora=request.form("hora")
set doc=server.createobject("microsoft.xmldom")
doc.load(server.mappath("uploads/chat.xml"))
set raiz=doc.documentElement
set registro=doc.createelement("chat")
raiz.appendchild(registro)
set campo=doc.createelement("titulo")
campo.text=titulo
registro.appendchild(campo)
set campo=doc.createelement("data")
campo.text=data
registro.appendchild(campo)
set campo=doc.createelement("hora")
campo.text=hora
registro.appendchild(campo)
doc.save(server.mappath("uploads/chat.xml"))
response.write"Cadastro realizado com sucesso!"
end if
%>
<form action="?acao=cadastrar" method="post">
<b>Título:</b><input type="text" name="titulo"><br>
<b>Data:</b><input type="text" name="data"><br>
<b>Hora:</b><input type="text" name="hora"><br>
<input type="submit" value="Enviar">
</form>
Como proceder para que atualize, e não insira um campo novo?
>
exemplo que mostra como atualizar os registros de XML.
<%@ LANGUAGE="VBSCRIPT" %>
<%
response.ContentType = "text/xml"
' Criar um objeto ASP XML parser
set xml0 = Server.CreateObject("Chilkat.Xml")
' Retorna a página XML como uma variante
set xml = xml0.HttpGet("http://www.xml-parser.com/companies.xml")
' Vamos mudar "Adobe Systems Incorporated" para
' "Adobe Systems Inc."
' Encontre o primeiro nó no documento XML, onde a marca é "name"
' 'E ao conteúdo começa com "Adobe"
set foundNode = xml.SearchForContent(Nothing, "name", "Adobe*")
If (not (foundNode is Nothing)) Then
foundNode.Content = "Adobe Systems Inc."
End If
response.write xml.GetXml()
%>
Tenho uma duvida (problema) inverso a este
preciso inserir um novo CONTATO dentro de CONTATOS
meu xml tem a seguinte estrutura:
<raiz>
<contatos>
<contato foto="foto do contato" link="pagina do contato">
<nome>meu nome</nome>
<endereco>meu endereço </endereco>
<telefone>meu telefone</telefone>
<contato>
<contatos>
<raiz>
para adicionar meus contatos estou usando o seguinte código ASP:
Set objDom = server.CreateObject("Microsoft.XMLDOM")
objDom.preserveWhiteSpace = True
blnFileExists = objDom.Load("path do xml")
If blnFileExists = True Then '============================================= se o xml existe'
Set objRoot = objDom.documentElement
Set objContatos = objDom.documentElement.firstChild '__________Acho que o erro está aqui só não sei como resolver____________'
Else '===================================================================== se o xml não existe'
Set objRoot = objDom.createElement("raiz")
objDom.appendChild objRoot
Set objContatos = objDom.createElement("contatos")
objroot.appendChild objContatos
End If
Set objContato = objDom.createElement("contato")
Set objPath = objDom.createAttribute("foto")
objPath.Text = "path da imagem"
objContato.setAttributeNode objPath
Set objLink = objDom.createAttribute("link")
objLink.Text = "pagina do contato"
objContato.setAttributeNode objLink
Set objNome = objDom.createElement("nome")
objNome.Text = "Nome do contato"
objContato.appendChild objNome
Set objEndereco = objDom.createElement("endereco")
objEndereco.Text = "Endereço do contato"
objContato.appendChild objEndereco
Set objTelefone = objDom.createElement("telefone")
objTelefone.Text = "telefone do contato"
objContato.appendChild objTelefone
objContatos.appendchild objContato'---------------------- linha 194'
If blnFileExists = False then '================================================ se o xml não existe'
Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'")
objDom.insertBefore objPI, objDom.childNodes(0)
End If
objDom.save(path do xml)
Set objDom = Nothing
Com este codigo ASP ocorre o seguinte:
Quando xml não existe ele cria o arquivo com os nodes corretos (funciona perfeitamente)
mas quando o xml já existe o ASP dá o seguinte erro:
Tipo de erro:
msxml3.dll (0x80004005)
Esta operação não pode ser executada com um nó do tipo ELEMENT.
/localhost/update_contato.asp, line 194
podem me ajudar??
primeiro você lista o objeto e lista, seta ele e cria como tenho aqui:
entendi
Só que preciso aproveitar este codigo ASP por fazer parte de um código maior,
para faze-lo funcionar acredito que eu deva setar o objContatos de maneira correta
você esta usando um atributo para contato
você verifica se o arquivo existe, senaun cria,raiz, da um createElement em contatos, adiciona
o createElement contatos, você precisa criar os outros Nodes
pois você esta tentando criar os outros element no contatos,
faz com o ted k´ disse...
>
você esta usando um atributo para contato
você verifica se o arquivo existe, senaun cria,raiz, da um createElement em contatos, adiciona
o createElement contatos, você precisa criar os outros Nodes
pois você esta tentando criar os outros element no contatos,
faz com o ted k´ disse...
obrigado pela sua ajuda e do Ted,
não fiz como o Ted disse, mas estudando o codigo dele com com as informações que você me passou,
consegui resolver meu problema
http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
mudei a linha:
Set objContatos = objDom.documentElement.firstChild
para
Set objContatos = objRoot.childNodes(1)
Com esta mudança consigo mater o Asp e a estrutura do xml que é lido por outro sistema (que não é meu)
mais uma vez, Brigadão
maravilha, como eu te falei acima...
você precisa criar os outros Nodes
exemplo que mostra como atualizar os registros de XML.
<%@ LANGUAGE="VBSCRIPT" %>
<%
response.ContentType = "text/xml"
' Criar um objeto ASP XML parser
set xml0 = Server.CreateObject("Chilkat.Xml")
' Retorna a página XML como uma variante
set xml = xml0.HttpGet("http://www.xml-parser.com/companies.xml")
' Vamos mudar "Adobe Systems Incorporated" para
' "Adobe Systems Inc."
' Encontre o primeiro nó no documento XML, onde a marca é "name"
' 'E ao conteúdo começa com "Adobe"
set foundNode = xml.SearchForContent(Nothing, "name", "Adobe*")
If (not (foundNode is Nothing)) Then
foundNode.Content = "Adobe Systems Inc."
End If
response.write xml.GetXml()
%>