Suprimir Tags XML[Resolvido]  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
nandobgi
Java Ninja
[Avatar]

Membro desde: 27/03/2006 07:27:06
Mensagens: 282
Localização: Sampa
Offline

Pessoal estou montando um xml com JDOM e gostaria que quando uma tag não possuir um valor ela seja suprimida.
Pensei em montar uma rotina para percorrer todo XML usando um laço, verificando se a tag possui valor caso esteja vazia então suprima a tag.
Alguém teria uma idéia melhor?

Obrigado

This message was edited 1 time. Last update was at 26/05/2008 14:20:21



[MSN]
eduveks
GUJ Ranger
[Avatar]

Membro desde: 19/04/2005 07:45:40
Mensagens: 831
Localização: Lisboa - Portugal
Offline

replace com regular expression... talvez?

http://www.cajuscript.org
http://eduveks.blogspot.com
[Email] [WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline


uma tag não possuir um valor ela seja suprimida


Explique melhor o que você quer. Você quer que isto

se transforme nisto aqui:

ou nisto aqui:


Ou você quer que isto aqui:

se transforme nisto aqui:

?

[WWW]
nandobgi
Java Ninja
[Avatar]

Membro desde: 27/03/2006 07:27:06
Mensagens: 282
Localização: Sampa
Offline

Thingol seria o seu primeiro exemplo:




se transforme nisto aqui:





Quando a tag não possuir um conteudo ela deve desaparecer.

Obrigado



[MSN]
nandobgi
Java Ninja
[Avatar]

Membro desde: 27/03/2006 07:27:06
Mensagens: 282
Localização: Sampa
Offline

Para aqueles que talvez encontrem o mesmo problema criei uma rotina para retirar as tags que não possuem conteudo:



Estou utilizando JDOM e essa foi a forma mais simples que encontrei para resolver o meu problema.

Utilizei um objeto ContentFilter para listar somente os elementos do meu arquivo XML, depois verifico se a tag corrente possuiu filhos caso sim guardo a referencia do objeto Element para remover os elementos sem texto.
A linha que possui o comando iterator.remove() foi adicionada para não ser gerada uma exception ConcurrentModificationException pois estamos modificando um Iterator enquanto percorremos o mesmo.

Valeu

Valeu


[MSN]
nilton.a
What is classpath?

Membro desde: 12/04/2007 18:38:45
Mensagens: 5
Offline

Pessoal estou com problema, não estou conseguindo ler os sub nós exemplo o logradouro o meu codigo:


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package ler;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;


public class LerXml{

public static void main(String[] arqgv){
try {
//Aqui você informa o nome do arquivo XML.
File f = new File("c:/mural.xml");

//Criamos uma classe SAXBuilder que vai processar o XML4
SAXBuilder sb = new SAXBuilder();

//Este documento agora possui toda a estrutura do arquivo.
Document d = sb.build(f);

//Recuperamos o elemento root
Element mural = d.getRootElement();
List elements = mural.getChildren();
Iterator iterator = elements.iterator();
//Iteramos com os elementos filhos, e filhos do dos filhos
while (iterator.hasNext()) {
Element element = (Element) iterator.next();
System.out.println("Códido: "+ element.getAttributeValue("id"));
System.out.println("Prioridade: "+ element.getAttributeValue("prioridade"));
System.out.println("Para: "+ element.getChildText("para"));
System.out.println("De: "+ element.getChildText("de"));
System.out.println("Corpo: "+ element.getChildText("corpo"));
System.out.println("logradouro: "+ element.getChildText("logradouro"));
}
} catch (JDOMException ex) {
Logger.getLogger(LerXml.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(LerXml.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

e o arquivo XML:

<mural>
<mensagem id="00001" prioridade="10">
<para>nome de envio</para>
<de>remetente</de>
<corpo>Este e apenas um teste</corpo>
<endereco>
<logradouro>R DA ASSEMBLEIA</logradouro>
<cep>06300-000</cep>
</endereco>
</mensagem>
</mural>

se vocês me ajudarem me ajudar eu agradeço.
charleib
Smalltalk

Membro desde: 22/04/2009 08:32:08
Mensagens: 3
Offline

Bom dia pessoal, estou com um problema parecido com o de voces, porem no meu caso devo expandir as tags vazias, deixar como no exemplo abaixo.
Estou usando o netbeans, e JDOM, mas ele deixa as tagas vazias assim:

<endereco/>

e eu gostaria que ficasse assim:

<endereco></endereco>


 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team