Estoy usando JAXB para analizar un archivo XML en mi aplicación basada en GWT. El XML es el siguiente (un ejemplo simplificado):Análisis filtrado de JAXB
<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>
he definido las clases, como se muestra a continuación:
@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 es el 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();
}
Necesito obtener la lista de contactos según el nombre de la empresa. Por ejemplo, obtenga todos los contactos para la compañía "abc". Puedo analizar todo el archivo XML y luego filtrar manualmente los registros. Pero si el archivo de entrada es grande, podría ser más eficiente analizar solo lo que necesito. Entonces, ¿es posible especificar un criterio por adelantado y analizar solo registros específicos?
Gracias.
gracias por tu respuesta. ¿Podría mostrar (o señalarme) el código de muestra usando el más simple de estos enfoques? Lo siento, todavía soy nuevo en esto. – DFB
Actualicé mi respuesta, aunque el enfoque de Mapa aún analiza todo el archivo XML, por lo que podría no ser lo que está buscando. ¡Recuerde medir el rendimiento en una variedad de conjuntos de datos! – artbristol
¿Está sugiriendo que al modificar mi clase de la libreta de direcciones, la descalificación obtendría los datos en un mapa (que sería genial, en realidad)?¿O debería crear una nueva clase SearchableAddressBook para convertir la lista en un mapa "after" unmarshalling? Gracias. – DFB