首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StAX EventFilter StackOverflowError

StAX EventFilter StackOverflowError
EN

Stack Overflow用户
提问于 2011-06-01 16:31:51
回答 1查看 2K关注 0票数 1

我有这个EventFilter实现,它应该过滤<InterestingElement>开始元素事件:

代码语言:javascript
复制
class InterestingElementFilter implements EventFilter {
    @Override
    public boolean accept(XMLEvent event)
    {
        if (event.isStartElement()) {
            StartElement startElement = event.asStartElement();
            String name = startElement.getName().getLocalPart();
            if (name.equals("InterestingElement")) {
                return true;
            }
        }
        return false;
    }
}

然后我创建一个过滤的读取器:

代码语言:javascript
复制
XMLEventReader interestingElementReader = xmlInputFactory.createFilteredReader(xmlEventReader, new InterestingElementFilter());

打电话时

代码语言:javascript
复制
startElementReader.peek();

我明白了:

代码语言:javascript
复制
java.lang.StackOverflowError
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipSpaces(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.seekCloseOfStartTag(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source)
at com.sun.xml.internal.stream.XMLEventReaderImpl.peek(Unknown Source)
at javax.xml.stream.util.EventReaderDelegate.peek(Unknown Source)
at com.sun.xml.internal.stream.EventFilterSupport.peek(Unknown Source)
at com.sun.xml.internal.stream.EventFilterSupport.peek(Unknown Source)
at com.sun.xml.internal.stream.EventFilterSupport.peek(Unknown Source)
at com.sun.xml.internal.stream.EventFilterSupport.peek(Unknown Source)

如果有人知道问题出在哪里,我会很感激的。

EN

回答 1

Stack Overflow用户

发布于 2011-06-02 19:32:11

我还没能复制你的问题,以下基于你的描述为我工作。我有没有从你的问题中漏掉什么?

InterestingElementFilter

代码语言:javascript
复制
import javax.xml.stream.EventFilter;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

class InterestingElementFilter implements EventFilter {

    public boolean accept(XMLEvent event)
    {
        if (event.isStartElement()) {
            StartElement startElement = event.asStartElement();
            String name = startElement.getName().getLocalPart();
            if (name.equals("InterestingElement")) {
                return true;
            }
        }
        return false;
    }

}

Demo

代码语言:javascript
复制
import java.io.FileInputStream;

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.XMLEvent;

public class Demo {

    public static void main(String[] args) throws Exception {
        XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
        XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream("input.xml"));
        InterestingElementFilter filter = new InterestingElementFilter();
        XMLEventReader interestingElementReader = xmlInputFactory.createFilteredReader(xmlEventReader, filter);

        while(interestingElementReader.hasNext()) {
            XMLEvent xmlEvent = interestingElementReader.peek();
            if(xmlEvent.isStartElement()) {
                System.out.println(xmlEvent.asStartElement().getName());
            }
            interestingElementReader.next();
        }
    }

}

input.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <InterestingElement>
        <child>Hello World</child>
    </InterestingElement>
</root>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6204585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档