Java: 在 XMLStreamReader2 上设置属性?

Java: Set attributes on XMLStreamReader2?

我正在使用 Woodstox 在我的应用程序中流式传输 XML 文档。在处理元素之前,我需要在模式定义的元素上设置默认属性,但是使用 Woodstox 执行此操作的唯一方法是使用额外的 XMLStreamReader 将文档读入内存,并使用一些逻辑来写入默认值属性,将其写入内存中 XML 文档,然后将内存中文档传递到业务逻辑中。

我不喜欢这样。我想按元素流式传输文档以保持低内存占用,因为文档可能很大,而且我在应用程序中有 运行 个这样的实例。有没有办法在流式传输文档时将属性注入 XMLStreamReader?我已经找到了一种在流式传输时跳过我不感兴趣的节点的方法:

public class XMLPreProcessor extends StreamReader2Delegate {
    public XMLPreProcessor(XMLStreamReader2 sr) {
        super(sr);
    }

    //Skip over all processing instructions
    //Can this be extended to inject attributes to elements?
    @Override
    public int next() throws XMLStreamException {
        int eventType = super.next();

        while(eventType == XMLStreamConstants.PROCESSING_INSTRUCTION) {
            eventType = super.next();
        }

        return eventType;
    }
}

能否调整此委托以将属性注入 XMLStreamReader?

不,我认为没有这种注入内容的工具。但是,如果您使用的是事件 API (XMLEventReader),您可能可以修改元素对象。

但是:您使用委托的方法可能会奏效。您需要覆盖所有访问属性的方法,并保持其他属性的状态。所以当被问及有多少属性时,你会 return 原始计数加上注入的属性;并且可能实际上在原始之后附加新的。 这听起来可行;您可能还需要覆盖 next() 以在读取 START_ELEMENT 时更新状态,在前进后丢弃。