【发布时间】:2011-05-10 11:24:40
【问题描述】:
我正在使用 JAXB 在基于 GWT 的应用程序中解析 XML 文件。 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 文件,然后手动过滤记录。但是如果输入文件很大,只解析我需要的文件可能会更有效。那么是否可以预先指定标准并仅解析特定记录?
谢谢。
【问题讨论】: