2

我使用 SAX 解析一个很大的 xml 文件,该文件很大并且有很多重复的节点。并使用JAXB将解析后重复的dom节点映射到javabeans中进行持久化。

这是我的代码片段。我使用 JAXB 的partial unmarshalling示例代码,它在每次启动节点解析时创建 Unmarshaller 对象。我可以将它重用于整个 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);
        }
    ...
4

1 回答 1

6

只要您的 JAXBContext 没有改变,您就可以重用 unmarshaller。

另请参阅JAXBContext 的 Javadoc。它包含一个为多个 XML 文件重用相同解组器的示例,仅当上下文(的包BazObject不在上下文路径上)更改时,您需要从不同的上下文创建一个新的解组器。

于 2013-03-21T08:49:26.863 回答