public void endElement(String namespaceURI, String localName, String name) { String expectedName = (String)_elemNameStack.Peek(); if (expectedName != name) { throw new RuntimeException("close tag mismatch"); } if (matchesPath(0, HEADING_PATH_NAMES)) { _lastHeadingText = _textNodeBuffer.ToString().Trim(); _textNodeBuffer.Length = (0); } if (_isInsideTable) { if (matchesTargetPath()) { _fdc.endTableGroup(_lastHeadingText); _isInsideTable = false; } else if (matchesRelPath(TABLE_ROW_RELPATH_NAMES)) { String[] cellData = new String[_rowData.Count]; _rowData.ToArray(cellData); _rowData.Clear(); Boolean[] noteFlags = new Boolean[_rowNoteFlags.Count]; _rowNoteFlags.ToArray(noteFlags); _rowNoteFlags.Clear(); ProcessTableRow(cellData, noteFlags); } else if (matchesRelPath(TABLE_CELL_RELPATH_NAMES)) { _rowData.Add(_textNodeBuffer.ToString().Trim()); _rowNoteFlags.Add((_cellHasNote)); _textNodeBuffer.Length = (0); } } _elemNameStack.Pop(); }