Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alebae

[Resolvido] Update com XML

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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()
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

maravilha, como eu te falei acima...

você precisa criar os outros Nodes

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.