我需要找到一种方法来在第一行之后中断流阅读器(读取XML并使用SAX解析它)。读完列名后的含义。
知道怎么做吗?
CODE:
XSSFSheetXMLHandler.SheetContentsHandler mySheetContentsHandler = new MySheetContentsHandler(true, xlsxHeaders);
File myFile = new File(filePath);
OPCPackage pkg = OPCPackage.open(myFile.getPath());
XSSFReader reader = new XSSFReader(pkg);
StylesTable styles = reader.getStylesTable();
ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg);
ContentHandler handler = new XSSFSheetXMLHandler(styles, sharedStrings, mySheetContentsHandler, true);
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(handler);
parser.parse(new InputSource(reader.getSheetsData().next()));
正如您所看到的here,XSSFSheetXMLHandler.SheetContentsHandler
是一个包含4种方法的界面。但是我怎么能打断文件的读取呢?
我试图在接口handler.endDocument();
的已实现方法中执行endRow();
,它没有帮助,程序没有任何中断地转到另一行。
答案 0 :(得分:1)
一个模糊的想法:
如何扩展XSSFSheetXMLHandler,有一个方法“iterrupt”将一些标志设置为true。并覆盖start / endElement,start / endDocument。你所能做的只是下面的事情,例如
@Override
public void startElement(java.lang.String uri, java.lang.String localName, java.lang.String name, org.xml.sax.Attributes attributes)
{
if(interrupted)
{
//throw your custom exception;
}
super.startElement(uri,localName,name,attributes);
}
或在您的class MySheetContentsHandler
中,您可以介绍该方法,然后在cell(...)
或endRow
中,您可以在处理之前检查中断状态?
同样,您可以覆盖其他方法。值得一试?