Ir para conteúdo

Arquivado

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

Jair Humberto

[Resolvido] criar um arquivo XML no VB6

Recommended Posts

Olá galera, estou precisando criar um arquivo xml no VB

 

o que consegui até agora foi carregar, e modificar um arquivo XML, mas preciso criar um do zero.

estou encontrando dificuldades na diferença entre

 

DOMDocument

XMLDocument

IXMLDOMDocument

IXMLDOMDocumentFragment

 

Não sei qual é o certo usar.

Abaixo postei o código principal onde carrega e modifica um xml existente:

Option Explicit
Private XML As DOMDocument


Public Function XMLADICIONACAMPO(Elemento As String, Valor As String) As String
	Set XML = New DOMDocument
	Dim root As IXMLDOMElement
	Dim nNode As IXMLDOMNode
	Dim nNodeText As IXMLDOMText

	XML.resolveExternals = True
	XML.validateOnParse = True
	XML.async = False

	Call XML.Load("nfe.xml")

	If XML.parseError.reason <> "" Then
		MsgBox XML.parseError.reason
		Exit Function
	End If

	Set root = XML.documentElement
	Set nNode = XML.createNode(NODE_ELEMENT, Elemento, "")
	Set nNodeText = XML.createTextNode(Valor)

	nNode.appendChild nNodeText
	root.appendChild nNode

	XML.save ("nfe2.xml")
	XMLADICIONACAMPO = XML.childNodes.Item(1).nodeName
End Function

Obrigado desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Jair.

 

Tente construir algo que se encaixa para você a partir desse modelo:

 

Set docxml = CreateObject("microsoft.xmldom")
'Verifica se ja existe o arquivo XML da transação
existe_pedidoTemp = docxml.Load("c:\teste.xml")
	

Set pedido = docxml.createelement("pedido")
docxml.appendchild (pedido)
Set dados_pedido = docxml.createelement("dados_pedido")
pedido.appendchild (dados_pedido)
dados_pedido.setAttribute "Nome", "Fulano"
dados_pedido.setAttribute "Idade", "18"
dados_pedido.setAttribute "Endereco", "Rua sem nome"
dados_pedido.setAttribute "Numero", "100"
dados_pedido.setAttribute "Cidade", "Pidamonhangaba"
dados_pedido.setAttribute "Estado", "SP"
dados_pedido.setAttribute "Pais", "Brasil"


docxml.save ("c:\teste.xml")
Set docxml = Nothing

Está bem simples, com um único nó, então se precisar de ajuda diz ai.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Claudio,

 

Obrigado por responder, eu não tinha percebido que este post estava respondido.

Um dos meus principais problemas, é que preciso setar o cabeçalho do XML

 

<?xml version="1.0" encoding="UTF-8"?>

Já tenho muita coisa desenvolvida com o DomDocument, talvez agora, dê mais trabalho para fazer de outra forma.

 

Será que existe algum jeito de criar atributos como você criou, criar o XML com o header, com a classe DOMDocument?

Sei que existe o método createAttribute, e eu fico com um objeto do tipo IXMLDOMAttribute, porém não sei o que fazer com

esse objeto a partir daí. Não consegui achar um outro método para adiciona-lo a um nó.

 

Estou usando a referencia a

Microsoft XML versão 6

Onde uso o DomDocument60.

Até agora, não consegui criar um atributo.

 

Da forma que você fez, funcionou perfeito, porém, para mim desfazer o que fiz, não dá, porque tenho so mais 4 dias para terminar

de desenvolver a aplicaçao.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, nunca usei essa forma como está fazendo, mas vou tentar reproduzir o que fez e pesquisar. Mas se você só tem 4 dias talvez pela mais rápido trocar seu código do que achar a solução pra essa forma. Você precisa mesmo do cabeçalho?

Olá Claudio,

 

Obrigado por responder, eu não tinha percebido que este post estava respondido.

Um dos meus principais problemas, é que preciso setar o cabeçalho do XML

 

<?xml version="1.0" encoding="UTF-8"?>

Já tenho muita coisa desenvolvida com o DomDocument, talvez agora, dê mais trabalho para fazer de outra forma.

 

Será que existe algum jeito de criar atributos como você criou, criar o XML com o header, com a classe DOMDocument?

Sei que existe o método createAttribute, e eu fico com um objeto do tipo IXMLDOMAttribute, porém não sei o que fazer com

esse objeto a partir daí. Não consegui achar um outro método para adiciona-lo a um nó.

 

Estou usando a referencia a

Microsoft XML versão 6

Onde uso o DomDocument60.

Até agora, não consegui criar um atributo.

 

Da forma que você fez, funcionou perfeito, porém, para mim desfazer o que fiz, não dá, porque tenho so mais 4 dias para terminar

de desenvolver a aplicaçao.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Claudio,

 

Eu pensei na seguinte solução e funcionou. Declarar as variaveis referentes aos nós que quero atributos, como

Variant e usar setAttribute "atributo","valor". O VB não me retorna essa função setAttribute como referenciada

porém funciona

 

por exemplo:

 

Option Explicit
Private XML As DOMDocument


Public Function XMLADICIONACAMPO(Elemento As String, Valor As String) As String
	Set XML = New DOMDocument

	'Dim root As IXMLDOMElement
	Dim root As Variant 'nó onde quero atributo

	Dim nNode As IXMLDOMNode
	Dim nNodeText As IXMLDOMText

	XML.resolveExternals = True
	XML.validateOnParse = True
	XML.async = False

	Call XML.Load("nfe.xml")

	If XML.parseError.reason <> "" Then
		MsgBox XML.parseError.reason
		Exit Function
	End If

	Set root = XML.documentElement

	root.setAttribute "atributo","valor" 'agora funciona até no DOMDocument

	Set nNode = XML.createNode(NODE_ELEMENT, Elemento, "")
	Set nNodeText = XML.createTextNode(Valor)

	nNode.appendChild nNodeText
	root.appendChild nNode

	XML.save ("nfe2.xml")
	XMLADICIONACAMPO = XML.childNodes.Item(1).nodeName
End Function

A sua ideia do setAttribute, me ajudou.

 

Obrigado Cláudio. Fica essa aí pra quem tiver o mesmo problema

:)

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.