Múltiplos cabeçalhos XML

3 respostas
C

Olá, gostaria de saber se alguém já se encontrou nessa situação:
Tenho um arquivo de texto gigantesco, ele possui vários pedaços de xml editados de um XSL. Estou usando o DOM parser para pegar os valores e os nós. Se eu quebro o xml em uma parte única funciona blz, porém se eu adiciono mais partes a ele como no arquivo original, dá erro no parser. Segue o XML:

<?xml version="1.0" encoding="UTF-8"?>
<update model="ElementModel">
	<uniqueMatchCriteria>
		<IdTerminal> 7A804 </IdTerminal>
	</uniqueMatchCriteria>
	<fields>
		<Latitude> 021_41_19_8_S </Latitude>
		<Longitude> 047_36_01_7_W </Longitude>
		<Atualizacao> 09/11/2012 14:12:36 </Atualizacao>
	</fields>
	<relations>
		<relation model="StageModel">
			<uniqueMatchCriteria>
				<Localizacao> 1,20 km a SSE de POSTO VASSUNUNGA </Localizacao>
			</uniqueMatchCriteria>
		</relation>
	</relations>
</update>
<?xml version="1.0" encoding="UTF-8"?>
<update model="ElementModel">
	<uniqueMatchCriteria>
		<IdTerminal> CDA36 </IdTerminal>
	</uniqueMatchCriteria>
	<fields>
		<Latitude> 023_00_32_3_S </Latitude>
		<Longitude> 047_08_37_8_W </Longitude>
		<Atualizacao> 09/11/2012 14:12:23 </Atualizacao>
	</fields>
	<relations>
		<relation model="StageModel">
			<uniqueMatchCriteria>
				<Localizacao> 0,13 km a S de EXP - VCP </Localizacao>
			</uniqueMatchCriteria>
		</relation>
	</relations>
</update>

Estou fazendo o seguinte para leitura do XML:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
			  
	        DocumentBuilder builder;  
	        builder = factory.newDocumentBuilder();  
	        Document document = builder.parse( new InputSource( new StringReader( xml ) ) ); 

	        Element root = (Element) document.getDocumentElement();
	        System.out.println();

	        System.out.println("<"+root.getTagName()+" model="+root.getAttribute("model")+">");
			
	        NodeList lista = root.getChildNodes();
	        for(int i=0 ;i < lista.getLength(); i++){
	        	Node item = lista.item(i);
	        	System.out.print(item.getNodeName() + "  "+item.getChildNodes().getLength());
	        	System.out.print(" | ");
	        	
	        	NodeList listaChild = item.getChildNodes();
	        	for(int j=0 ; j < listaChild.getLength(); j++){
	        		Node child = listaChild.item(j);
	        		System.out.print(" "+child.getNodeName() +"("+child.getTextContent() +")");
	        	}
	        	System.out.println();
	        }

Alguém já teve um problema desse?
Obrigado

3 Respostas

E

cssonddos:
porém se eu adiciono mais partes a ele como no arquivo original, dá erro no parser.

Tem de dar, já que isso não mais é um arquivo XML válido. Tente usar um browser (como o IE ou o Firefox) para carregar esse arquivo e veja que ele nem carrega, já dá um erro indicando que não é um arquivo XML válido.

C

Sim, eu sei q o xml não é válido, pois ele tem mais de um cabeçalho:

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

Eu precisava saber se tem alguma forma de quebrar esse arquivo em xml únicos. Mas não sei se a abordagem de carregar td na memória é a mais viável. Queria saber de uma forma de ler o arquivo até chegar no próximo cabeçalho, aí depois a partir de onde parou continuar lendo, e assim por diante.

Obrigado

E

Use uma outra coisa (não um parser XML, que exige que o arquivo seja válido) para quebrar esse arquivo zoado em vários arquivos XML válidos.

Você tem certeza absoluta que cada pedaço VAI TER a instrução “<?xml” ? Se tiver, então é relativamente fácil escrever um programa (usando BufferedReader) que leia esse arquivo zoado para criar um outro. Basta ler esse arquivo, linha por linha, ir gravando em outro arquivo, e se achar o “<?xml”, fechar o arquivo de saída corrente e abrir um outro novo.

Criado 27 de novembro de 2012
Ultima resposta 28 de nov. de 2012
Respostas 3
Participantes 2