dom4j duvida rss+xml+CDATA

1 resposta
germanosk

Olá Pessoal,

Estou utilizando o dom4j 1.6
Basicamente estou tentando encontrar imagens e textos dentro de RSS independente da formatação.
Para isso estou tentado listar os elementos e os atributos do elementos.
Porém me deparei com um problema em alguns RSS o link das imagens e o texto encontram-se dentro de campo CDATA no elemento description, de forma que o elemento

, e

bem como seus atributos e dados de modo que não consigo acessa-los como elementos :frowning: .

Já tentei inclusive usar o Jericho para tratar os dados do CDATA, e não sei se foi por inabilidade mesmo ou pelo proprio Jericho e também não consegui

Segue o código sem o Jericho:

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

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;;
import org.dom4j.*;
import org.dom4j.io.SAXReader;

/**
 *
 * @author Germano Assis
 */
public class Selecionador {
    public void listar(String endereco) throws Exception{
    InputStream is = new FileInputStream(endereco);

    SAXReader reader = new SAXReader();
    org.dom4j.Document doc = reader.read(is);
    is.close();
    Element content = doc.getRootElement();  //this will return the root element in your xml file
    content = encontrarItem(content);
    List<Element> elementos = content.elements("item"); // this will retun List of all Elements with name "element"
    System.err.println(content.getName());
    listarSubElementos(elementos.get(0));
    List<Attribute> atributos = elementos.get(0).attributes();
    for(Attribute a: atributos){
        a.getName();
        System.err.println("Nome:"+a.getName());
        System.out.println("Valor:"+a.getValue());
    }
    //Attribute attrib = methodEls.get(0).attribute("attributeName"); // this is the "attributeName" attribute of first element with name "element
    }
    
   
    
    /*
     * Função que lista os elementos e sub-elementos e seus valores e chama a função
     * que lista os atributos dos mesmos
     */
    public void listarSubElementos(Element e){
         List<Element> elementos = e.elements();
        if(!elementos.isEmpty()){
            for(Element a: elementos){
                a.getName();
                System.err.println("ELEMENTO Nome:"+a.getName());
                System.err.println("ELEMENTO Valor:"+a.getText());
                
               
                listarAtributos(a);
            
                listarSubElementos(a);
                
            }
        }
    }
    
    /*
     * Função que listas os atributos de um Elemento
     */
    public void listarAtributos(Element e){
        List<Attribute> atributos = e.attributes();
        for(Attribute a: atributos){
            a.getName();
            System.err.println("ATRIBUTO Nome:"+a.getName());
            System.err.println("ATRIBUTO Valor:"+a.getValue());
        }
    }
    public Element encontrarItem(Element content){
        Element elemento =null;
        if(content.elements("item").isEmpty()){
             List<Element> elementos = content.elements();
             if(elementos.size()>0){
                for(Element e: elementos){
                 elemento = encontrarItem(e);
                }
             }
             return elemento;
        }
        else{
           System.err.println( content.getPath());
            return content;
        }
    }
    public static void main(String[] args) {
        try {
          
            new Selecionador().listar("UM ENDEREÇO QUALQUER"+"revista_quem.xml");
            
        } catch (Exception ex) {
            ex.printStackTrace();  
        }
    }
}

Segue o link http://revistaquem.globo.com/rss/ultimas/feed.xml para baixar o xml que eu estou testando em questão.

Qualquer ajuda já terá meus agradecimentos por antecipação.

1 Resposta

germanosk

Olá pessoal pode trancar e encerrar o tópico.
Como nenhuma ajuda veio acabei por adotar uma outra lib jSoup
Ela “parseia” tanto o xml quanto o html.
Vou bater um pouco de cabeça até refinar o código para utilizar do jeito que preciso mas enfim tentei obter o que precisava com ela e consegui.
Se alguém por ventura vier a ter o mesmo problema recomendo usar.

Criado 21 de setembro de 2012
Ultima resposta 25 de set. de 2012
Respostas 1
Participantes 1