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
bem como seus atributos e dados de modo que não consigo acessa-los como elementos
.
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.