JAXB análise filtrada
Estou usando o JAXB para analisar um arquivo XML no meu aplicativo baseado em GWT. O XML fica assim (um exemplo simplificado):
<addressbook>
<company name="abc">
<contact>
<name>...</name>
<address>...</address>
</contact>
<contact>
<name>...</name>
<address>...</address>
</contact>
<contact>
<name>...</name>
<address>...</address>
</contact>
...
...
</company>
<company name="def">
<contact>
<name>...</name>
<address>...</address>
</contact>
...
...
</company>
...
...
</addressbook>
Eu defini as classes como mostrado abaixo:
@XmlRootElement(name="addressbook")
public class Addressbook implements Serializable {
private ArrayList<Company> companyList = new ArrayList<Company>();
public Addressbook() {
}
@XmlElement(name = "company")
public ArrayList<Company> getCompanyList() {
return companyList;
}
}
=============================
@XmlRootElement(name="company")
public class Company implements Serializable {
private String name;
private ArrayList<Contact> contactList = new ArrayList<Contact>();
public Company() {
}
@XmlAttribute
public String getName() {
return name;
}
@XmlElement(name = "contact")
public ArrayList<Contact> getContactList() {
return contactList;
}
...
...
}
=============================
@XmlRootElement(name="contact")
public class Contact implements Serializable
{
private String name;
private String address;
public Contact() {
}
@XmlElement
public String getName ()
{
return name;
}
@XmlElement
public String getAddress ()
{
return address;
}
...
...
}
Este é o código:
try {
JAXBContext jc = JAXBContext.newInstance(Addressbook.class);
Unmarshaller um = jc.createUnmarshaller();
addressbook = (Addressbook) um.unmarshal(new FileReader("ds/addressbook.xml"));
} catch (JAXBException e) {
e.printStackTrace();
}
Preciso obter a lista de contatos com base no nome da empresa. Por exemplo, obtenha todos os contatos da empresa "abc". Posso analisar o arquivo XML inteiro e filtrar manualmente os registros. Mas se o arquivo de entrada for grande, talvez seja mais eficiente analisar apenas o que eu preciso. Portanto, é possível especificar antecipadamente um critério e analisar apenas registros específicos?
Obrigado