我想为以下 XSD 架构 http://www.uniprot.org/support/docs/uniprot.xsd使用 JAXB 解析数据。
典型的 XML 如下所示:http ://www.uniprot.org/uniprot/Q8NEJ9.xml
我的课程是使用以下方法生成的:
xjc http://www.uniprot.org/support/docs/uniprot.xsd
我无法让 JAXB 解组器解析这些数据。
xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE);
XMLEventReader rx=xmlInputFactory.createXMLEventReader(in);
final QName uEntry=new QName("http://uniprot.org/uniprot","entry");
while(rx.hasNext())
{
XMLEvent evt=rx.peek();
if(!(evt.isStartElement() && evt.asStartElement().getName().equals(uEntry)))
{
rx.next();
continue;
}
JAXBElement<Entry> jaxbElement=uniprotUnmarshaller.unmarshal(rx, Entry.class);
Entry entry= jaxbElement.getValue();
(...)
}
'entry' 的每个实例都保持为空。当一个条目被编组到 stderr 时,我得到如下信息:
<ns2:entry xmlns:ns2="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2011-06-28+01:00" modified="2011-09-21+01:00" version="20"/>
我认为这是因为 xjc 忽略了名称空间。它生成:
@XmlRootElement(name = "entry")
public class Entry {
代替 (?)
@XmlRootElement(name = "entry",namespace="http://uniprot.org/uniprot")
public class Entry {
我怎样才能解决这个问题 ?