我使用sax来解析一个大的xml文件,这个文件很大,有许多重复的节点。并使用jaxb将解析和重复的dom节点映射到javabeans以实现持久性。
这是我的代码片段。我使用jaxb的partial unmarshalling示例代码,每次开始节点解析时,它都会创建解组器对象。我可以将它重用为一个完整的xml解析,还是将其缓存为多个xml解析?

public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
    ...

    if (namespaceURI.equals("") && localName.equals( “product” )) {
        Unmarshaller unmarshaller = null;
        try {
            //I want to reuse it, not create it in each startElement method
            unmarshaller = jaxbContext.createUnmarshaller();
        } catch (JAXBException e) {
            throw new SAXException(e);
        }
    ...

最佳答案

只要jaxbcontext不变,就可以重用解组器。
另请参见Javadoc for JAXBContext。它包含一个对多个XML文件重用同一解组器的示例,只有当上下文(包BazObject不在上下文路径上)发生更改时,才需要从不同的上下文创建新的解组器。

07-24 09:27