Анализ с фильтром JAXB

Я использую JAXB для синтаксического анализа XML-файла в моем приложении на основе GWT. XML выглядит следующим образом (упрощенный пример):

<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>

Я определил классы, как показано ниже:

@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;
    }

    ...
    ...
}

Это код:

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();
}

Мне нужно получить список контактов на основе названия компании. Например, получить все контакты компании «abc». Я могу проанализировать весь XML-файл, а затем вручную отфильтровать записи. Но если входной файл большой, может быть более эффективным анализировать только то, что мне нужно. Так можно ли заранее указать критерий и анализировать только определенные записи?

Спасибо.

9
задан DFB 10 May 2011 в 11:31
поделиться