[英]How to extend XMLStreamReader?
http://docs.oracle.com/javaee/5/api/javax/xml/stream/XMLStreamReader.html
我想扩展XMLStreamReader,但这是一个接口。
我想做类似的事情:
public class GraphDataStreamReader extends XMLStreamReader{
public GraphDataStreamReader(){
super();
}
public void nextStartElement() throws XMLStreamException {
do {
super.next();
} while (!super.isStartElement());
}
}
其他类:
XMLInputFactory factory = XMLInputFactory.newInstance();
GraphDataStreamReader streamReader = (GraphDataStreamReader) factory.createXMLStreamReader(new FileReader(xmlFile)); //returns XMLStreamReader
streamReader.next(); //method from XMLStreamReader
streamReader.nextStartElement(); //method from GraphDataStreamReader
这可能吗? 如果是,那怎么办?
您可以尝试使用委托模式,如下所示:
public class GraphDataStreamReader implements XMLStreamReader {
private XMLStreamReader delegate;
public GraphDataStreamReader (XMLStreamReader delegate) {
this.delegate = delegate;
}
@Override
public void close() throws XMLStreamException {
delegate.close();
}
... similar for other methods of XMLStreamReader ...
... then add your own methods ...
}
这是扩展StreamReaderDelegate的方法 :
class GraphDataStreamReader extends StreamReaderDelegate {
public GraphDataStreamReader(XMLStreamReader reader) {
super(reader);
}
public void nextStartElement() throws XMLStreamException {
do {
super.next();
} while (!super.isStartElement());
}
}
XMLInputFactory factory = XMLInputFactory.newInstance();
GraphDataStreamReader streamReader = new GraphDataStreamReader(
factory.createXMLStreamReader(fileInputStream));
streamReader.next();
streamReader.nextStartElement();
我已经解决了(经过多次尝试)。
具有自己的方法的扩展XMLStreamReader:
public class GraphDataStreamReader extends XMLStreamReaderImpl {
public GraphDataStreamReader(InputStream arg0, PropertyManager arg1) throws XMLStreamException {
super(arg0, arg1);
}
public boolean nextStartElement() throws XMLStreamException {
....
}
}
使用GraphDataStreamReader的类:
public class GraphDataParser {
private GraphDataStreamReader graphSR;
private GraphDataParser(String xmlFile) throws FileNotFoundException, XMLStreamException {
FileInputStream inStream = new FileInputStream(new File(xmlFile));
graphSR = new GraphDataStreamReader(inStream, new PropertyManager(1));
}
}
感谢您的所有想法。 多数功劳归McDowell。 由于他的职务,我一直努力。 我希望这个问题对其他人仍然有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.