Replace dentro xml[RESOLVIDO]

9 respostas
M

Galera, bom dia!
Estou lendo um .xml e estou entrando na linha que eu quero, porém não consigo fazer um replace para pegar só os valores que estao dentro do CDATA
Segue o código se alguém puder me ajudar..tentei usar REGEX ,mas não consegui.Obrigada desde já!

Minha linha: Erro: Unclosed character class near index 9 ![CDATA[]]

String stringao = null;
			BufferedReader reader1 = new BufferedReader(new FileReader("entrada.xml"));
			while (reader1.ready()) {
				stringao = reader1.readLine().replaceAll("\t", "");
				if (stringao.startsWith("<![CDATA[") && !stringao.equals("")) {
					String teste = stringao.replaceAll("![CDATA[]]", "");//aqui que dá erro
					String cdServico = stringao.substring(0,2);
					//painelDadosApoliceProposta.getJTextFieldCia().setText(cdServico);
				}
			}

RESOLUÇÃO:

String cdServico = null;
		String stringao = "<[CDATA[51010C050000]]>";
        Pattern p = Pattern.compile("[0-9][(*[0-9a-zA-Z])]");
        Matcher m = p.matcher(stringao);
        boolean b = false;
        StringBuilder retorno = new StringBuilder();
        while(b = m.find()){
            retorno.append(m.group());   
            cdServico  = retorno.substring(0,2);//51
        }
       
        //System.out.println(retorno.toString());
        System.out.println(cdServico);

9 Respostas

V

Por que você não lê o XML através do DOM, ou invés de tentar parsea-lo diretamente?

Ao postar código, por favor, use a tag code:

Seu código aqui

Senão fica bem difícil entender o que você escreve.

M

Opa acertei la…mas com DOM nao é mais dificil???

L

Olha, esse teu CDATA parece estar um tanto quanto estranho, o formato correto é:

<![CDATA[ blablabla ]]>

Digo, faltou fechar o CDATA, pela linha que tu colocou alí em cima.

Sobre ler o XMl, a melhor maneira é usar XPath. Você já pensou em utilizá-lo?! Tem vários exemplos aí no google que podem te ajudar.

Acredito que tu terás bem menos linhas de código e ele ficara bem mais legível, bonito e fácil :slight_smile:

Abraço

M

Eu tentei fazer stringao.replaceAll("<[CDATA[]]>", “”);…mas nao deu certo.
Erro:
Unclosed character class near index 10
<[CDATA[]]>

B

O replaceAll recebe como primeiro argument uma expressão regular, então tens que formatar uma.

Tem o quote do Pattern que ajuda a fazer isto:

String regexCDATA = Pattern.quote("<![CDATA[]]>");

stringao.replaceAll(regexCDATA, "");
M

Obrigada pela ajuda ele parou de dar erro,mas nao tira a tag.
Para testar:

String stringao = "<[CDATA[51010C050000]]>";		  
				String regexCDATA  = Pattern.quote("<![CDATA[]]>");
				stringao = stringao.replaceAll(regexCDATA, "");	  
				String cdServico = stringao.substring(0,2);// deve retornar 51
				System.out.println(cdServico);
V

Eu acho com o DOM muito mais fácil. Até porque é ele que cuida desses detalhes para você.

A tendência é que esse xml se torne mais e mais detalhado a medida que os anos passarem, então, é bom usar estruturas apropriadas para trabalhar com XML desde o início.

V

Dá uma lida aqui, Monike:
http://www.ibm.com/developerworks/library/x-wxxm35.html

M
String cdServico = null;
	String stringao = "<[CDATA[51010C050000]]>";
    Pattern p = Pattern.compile("[0-9][(*[0-9a-zA-Z])]");
    Matcher m = p.matcher(stringao);
    boolean b = false;
    StringBuilder retorno = new StringBuilder();
    while(b = m.find()){
        retorno.append(m.group());   
        cdServico  = retorno.substring(0,2);//51
    }
   
    //System.out.println(retorno.toString());
    System.out.println(cdServico);
Criado 26 de abril de 2010
Ultima resposta 26 de abr. de 2010
Respostas 9
Participantes 4