Ler xml com jdom

0 respostas
L

Olá amigos, estou com 2 problemas para ler um XML usando jDOM. Segue o XML:

arquivo.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<menus>
    <menu>
        <label>Main Menu 1</label>
        <href>link1.jsp</href>
        <title>Ir para a página link1</title>
    </menu>
    
    <menu>
        <label>Main Menu 2</label>
        <href></href>
        <title></title>
        <menu>
            <label>SubMenu 2.1</label>
            <href>link21.jsp</href>
            <title></title>
        </menu>	
        <menu>
            <label>SubMenu 2.2</label>
            <href>link22.jsp</href>
            <title></title>
        </menu>	
        <menu>
            <label>SubMenu 2.3</label>
            <href>link23.jsp</href>
            <title></title>
        </menu>
    </menu>
    
    <menu>
        <label>Main Menu 3</label>
        <href></href>
        <title></title>
        <menu>
            <label>SubMenu 3.1</label>
            <href>link31.jsp</href>
            <title></title>
        </menu>	
        <menu>
            <label>SubMenu 3.2</label>
            <href>link32.jsp</href>
            <title></title>
        </menu>	
        <menu>
            <label>SubMenu 3.3</label>
            <href>link33.jsp</href>
            <title></title>
        </menu>
    </menu>
    
    <menu>
        <label>Main Menu 4</label>
        <href></href>
        <title></title>
        <menu>
            <label>SubMenu 4.1</label>
            <href>link41.jsp</href>
            <title></title>
        </menu>	
        <menu>
            <label>SubMenu 4.2</label>
            <href>link42.jsp</href>
            <title></title>
        </menu>	
        <menu>
            <label>SubMenu 4.3</label>
            <href>link43.jsp</href>
            <title></title>
        </menu>
    </menu>	
</menus>

PROBLEMA 1

Eu quero ler este aquivo e jogar dentro de uma classe. O que não consigo fazer é testar se um elemento tem filho. Repare que o nó da linha 3 (Main Menu 1) não tem filho, ou seja, nenhum filho dentro dele. Abaixo segue a classe que lê este XML:

public class MenuXML {    
    private Usuario usuario;

    public MenuXML(Usuario usuario) {
        this.usuario = usuario;
    }
    public ArrayList<Menu> getMainmenu() {
        ArrayList<Menu> mainmenu = new ArrayList<Menu>();
        String xmlFile = "C:/arquivo.xml";
        Document doc = null;
        SAXBuilder builder = new SAXBuilder();

        try {
            doc = builder.build(xmlFile);
        } catch (Exception e) {
            e.printStackTrace();
        }           

        Element menus = doc.getRootElement();
        List<Element> lista = menus.getChildren();

        for (Element m : lista ) {
            Menu mn = new Menu();
            mn.setLabel(m.getChildText("label"));
            mn.setHref(m.getChildText("href"));
            mn.setTitle(m.getChildText("title"));
            
            //Verifica se tem filho
            List<Element> submenu = m.getChildren();
            ArrayList<ItemMenu> items = new ArrayList<ItemMenu>();
            for (Element sm : submenu) {
                Menu submn = new Menu();
                submn.setLabel(sm.getChildText("label"));
                submn.setHref(sm.getChildText("href"));
                submn.setTitle(sm.getChildText("title"));
                items.add(submn);
            }
            mn.setSubmenu(items);
            mainmenu.add(mn);
        }     
        
        return mainmenu;
    }    
}

O que está acontecendo é que, como não testei se o nó tem filho, para o caso do nó menu 1, ele entra no segundo for da classe acima e adiciona uma linha com um objeto populado com null em todos os parâmetros. Eu queria que se não tivesse filho, ele nem entrasse no segundo for.

PROBLEMA 2

Na linha 9 da minha classe, eu pego o caminho real do XML apenas para teste, mas este xml estrá dentro de projeto/web/xml/arquivo.xml. Como é que posso fazer pra pegar o xml deste caminho ? Existe como pegar o caminho real deste arquivo ?

Bem na verdade eu queria colocar dentro da pasta WEB-INF mas daih acho que seria mais difícil eu pegar este arquivo

Alguém pode me ajudar com estes problemas ?

Abraços

Criado 10 de abril de 2008
Respostas 0
Participantes 1