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