Ir para conteúdo

Arquivado

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

Douglas Pascini

Ler arquivo XML que se encontra no desktop

Recommended Posts

Bom dia, sou novo na programação em JavaScript.
Estou tentando ver um arquivo, XML, que esta em uma pasta em meu desktop. Ate que consigo algumas coisas, como achar o arquivo e carregar o nome dele em um campo TEXT no html.
Mas o que realmente preciso e carregar o conteúdo de suas tags em campos específicos.

Fiz o seguinte cógido com base em pesquisas da internet

/* Seleciona o arquivo XML e*/
function CarregaDados() {
	var file = document.getElementById('fileToUpload').files[0];
	
	if(file) 
		document.getElementById('txtXMLArq').value = file.name;
		var ajx = new XMLHttpRequest();
		ajx.onreadystatechange = function (){
			if (ajx.readyState == 4){
				var x = ajx.responseXML;
				alert(x);
				x.getElementByTagName("chCTe")[0].fisrsChild.nodeValue;
				document.getElementById('ChaveAcesso').value = x;
			}			
		}
		ajx.open("POST", document.getElementById('fileToUpload').files);
		ajx.send(null);

} 

O formlário... quero carregar o conteudo do XML (um conhecimento de transporte) para os campos: ChaveAcesso, serie, txtCte.

<form name="form-imp_cte" method="post" action="" id="form-imp_cte">
	<div  id="accordion">
	<fieldset>
		<legend> Conhecimento Eletrônico </legend>
	<div>
		<label for="txtXMLArq" >Arquivo XML</label>
		<input name="txtXMLArq" type="text" id="txtXMLArq" size="60" required>
		<input type="hidden" name="carregar" id="carregar" value="carregar" />
		<input type="file" alt="Submit" name="fileToUpload" id="fileToUpload" onchange="CarregaDados();"/>
	</div>
	<br/>
	<div id="ChaveAcesso">
		<label for="ChaveAcesso">Chave de acesso</label>
		<input name="ChaveAcesso" type="text" id="ChaveAcesso" size="50" maxlength="44">
		<img src="../imagem/copy.png" width="20" height="20" align="texttop" id="copiar" />
	</div>
	<div>
		<label>Série</label>
		<input name="txtSerie" id="txtSerie" type="text" size="5" maxlength="5">
		<span>Número do CT-e</span>
		<input name="txtCte" id="txtCte" type="text" size="14" maxlength="10"/>
	</div>
	</fieldset>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para quem tem a mesma duvida que eu tive. Abaixo esta o código, ainda meio complexo, mas funcional.

Usando um loop busco as informações constantes nas "tags" do xml do conhecimento eletrônico.

function carregaXMLCte(){
	
	document.getElementById('txtXMLArq').value = "";
	var file = document.getElementById('fileToUpload').files[0];

	if(file) {
		document.getElementById('txtXMLArq').value = file.name;
	}
	
	var ajax = new XMLHttpRequest();
	//var r = document.getElementById('ChaveAcesso').value;
	var nct = document.getElementById('txtCte');
	
	ajax.onreadystatechange = function(){
		if(ajax.readyState == 4){
			if(ajax.status == 200){
				var xml = ajax.responseXML;
				var tag = "";
				var n_cteProc = 0;
				var n_cte = 0;
				var n_protcte = 0;
				var n_infcte = 0;
				
				for (n_cteProc = 0; n_cteProc <= xml.childNodes[0].childElementCount; n_cteProc++){ 
					for(n_cte = 0; n_cte <= xml.childNodes[0].childNodes[n_cteProc].childElementCount; n_cte++){
						if((xml.childNodes[0].childNodes[n_cteProc].nodeName).toUpperCase() == 'CTE'){
							//alert('chave acesso');
							for (n_protcte = 0; n_protcte <= xml.childNodes[0].childNodes[0].childNodes[n_cte].childElementCount; n_protcte++){
								if((xml.childNodes[0].childNodes[0].childNodes[n_cteProc].nodeName).toUpperCase() == 'INFCTE'){
									for(n_infcte = 0; n_infcte <= xml.childNodes[0].childNodes[0].childNodes[0].childNodes[n_protcte].childElementCount; n_infcte++){
										/* tag IDE */
										if ((xml.childNodes[0].childNodes[0].childNodes[0].childNodes[n_protcte].nodeName).toUpperCase() == "IDE"){

											var tag = (xml.childNodes[0].childNodes[0].childNodes[0].childNodes[n_protcte].childNodes[n_infcte].nodeName).toUpperCase();
											if (tag == "CFOP"){
												document.getElementById("cfop").value = xml.childNodes[0].childNodes[0].childNodes[0].childNodes[n_protcte].childNodes[n_infcte].innerHTML ;
											} else if (tag == "SERIE"){
												document.getElementById("txtSerie").value = xml.childNodes[0].childNodes[0].childNodes[0].childNodes[n_protcte].childNodes[n_infcte].innerHTML ;
											} else if (tag == "NCT"){
												document.getElementById("txtCte").value = xml.childNodes[0].childNodes[0].childNodes[0].childNodes[n_protcte].childNodes[n_infcte].innerHTML ;
											} else if (tag == "MOD"){
												document.getElementById("modelocte").value = xml.childNodes[0].childNodes[0].childNodes[0].childNodes[n_protcte].childNodes[n_infcte].innerHTML ;
											} else if (tag == "DHEMI"){
												document.getElementById("entrada").value = xml.childNodes[0].childNodes[0].childNodes[0].childNodes[n_protcte].childNodes[n_infcte].innerHTML ;
											}
											
											//document.getElementById("observacao").value = document.getElementById("observacao").value +"-"+ n_infcte+"-" +tag;
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	ajax.open('GET', '../CT-e/'+file.name);
	ajax.send(null);
}

No formulário, somente seleciono o arquivo desejado que chama a função acima com o ==> onchange="carregaXMLCte();"

 

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.